range-diff: plug memory leak in common invocation
Create a public release_patch() version of the private free_patch()
function added in 13b5af22f3
(apply: move libified code from
builtin/apply.c to apply.{c,h}, 2016-04-22). Unlike the existing
function this one doesn't free() the "struct patch" itself, so we can
use it for variables on the stack.
Use it in range-diff.c to fix a memory leak in common range-diff
invocations, e.g.:
git -P range-diff origin/master origin/next origin/seen
Would emit several errors when compiled with SANITIZE=leak, but now
runs cleanly.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
ef3fe21448
commit
4998e93fa6
7
apply.c
7
apply.c
@ -219,13 +219,18 @@ static void free_fragment_list(struct fragment *list)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_patch(struct patch *patch)
|
void release_patch(struct patch *patch)
|
||||||
{
|
{
|
||||||
free_fragment_list(patch->fragments);
|
free_fragment_list(patch->fragments);
|
||||||
free(patch->def_name);
|
free(patch->def_name);
|
||||||
free(patch->old_name);
|
free(patch->old_name);
|
||||||
free(patch->new_name);
|
free(patch->new_name);
|
||||||
free(patch->result);
|
free(patch->result);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void free_patch(struct patch *patch)
|
||||||
|
{
|
||||||
|
release_patch(patch);
|
||||||
free(patch);
|
free(patch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
apply.h
2
apply.h
@ -173,6 +173,8 @@ int parse_git_diff_header(struct strbuf *root,
|
|||||||
unsigned int size,
|
unsigned int size,
|
||||||
struct patch *patch);
|
struct patch *patch);
|
||||||
|
|
||||||
|
void release_patch(struct patch *patch);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some aspects of the apply behavior are controlled by the following
|
* Some aspects of the apply behavior are controlled by the following
|
||||||
* bits in the "options" parameter passed to apply_all_patches().
|
* bits in the "options" parameter passed to apply_all_patches().
|
||||||
|
@ -165,6 +165,7 @@ static int read_patches(const char *range, struct string_list *list,
|
|||||||
patch.old_mode, patch.new_mode);
|
patch.old_mode, patch.new_mode);
|
||||||
|
|
||||||
strbuf_addstr(&buf, " ##");
|
strbuf_addstr(&buf, " ##");
|
||||||
|
release_patch(&patch);
|
||||||
} else if (in_header) {
|
} else if (in_header) {
|
||||||
if (starts_with(line, "Author: ")) {
|
if (starts_with(line, "Author: ")) {
|
||||||
strbuf_addstr(&buf, " ## Metadata ##\n");
|
strbuf_addstr(&buf, " ## Metadata ##\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user