add -p: fix memory leak
PATCH 1/1 add -p: fix memory leak
From: Phillip Wood <[email protected]>
asan reports that the C version of add -p is not freeing all the memory it allocates. Fix this by introducing a function to clear struct add_p_state and use it instead of freeing individual members.
---
add -p: fix memory leak
It seems to be the season for add -p fixes. This patch fixes a memory leak in the C version found with asan.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-729%2Fphillipwood%2Fwip%2Fadd-p-fix-memory-leak-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-729/phillipwood/wip/add-p-fix-memory-leak-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/729
add-patch.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)
add-patch.c +16 -8
@@ -266,6 +266,20 @@ struct add_p_state {const char *revision; }; +static void add_p_state_clear (struct add_p_state *s) +{ +size_t i; + +strbuf_release (&s->answer); +strbuf_release (&s->buf); +strbuf_release (&s->plain); +strbuf_release (&s->colored); +for (i =0 ; i < s->file_diff_nr; i++) +free (s->file_diff[i].hunk); +free (s->file_diff); +clear_add_i_state (&s->s); +} +static void err (struct add_p_state *s,const char *fmt, ...) {va_list args;
@@ -1690,9 +1704,7 @@ int run_add_p(struct repository *r, enum add_p_mode mode, repo_refresh_and_write_index(r, REFRESH_QUIET, 0, 1, NULL, NULL, NULL) < 0) || parse_diff(&s, ps) < 0) { -strbuf_release (&s.plain); -strbuf_release (&s.colored); -clear_add_i_state (&s.s); +add_p_state_clear (&s);return -1 ; }
@@ -1707,10 +1719,6 @@ int run_add_p(struct repository *r, enum add_p_mode mode,else if (binary_count == s.file_diff_nr)fprintf (stderr,_ ("Only binary files changed.\n" )); -strbuf_release (&s.answer); -strbuf_release (&s.buf); -strbuf_release (&s.plain); -strbuf_release (&s.colored); -clear_add_i_state (&s.s); +add_p_state_clear (&s);return 0 ; }
base-commit: 3a238e539bcdfe3f9eb5010fd218640c1b499f7a
Signature · 1 line
gitgitgadget
Hi Phillip,
Quoted 7 lines · Phillip Wood via GitGitGadget
From: Phillip Wood <[email protected]>
asan reports that the C version of
add -pis not freeing all the memory it allocates. Fix this by introducing a function to clearstruct add_p_stateand use it instead of freeing individual members.Signed-off-by Phillip Wood <[email protected]>
ACK! And thanks for fixing bugs I introduced,
Dscho
Quoted 66 lines
---
add -p: fix memory leakIt seems to be the season for add -p fixes. This patch fixes a memory leak in the C version found with asan.
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-729%2Fphillipwood%2Fwip%2Fadd-p-fix-memory-leak-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-729/phillipwood/wip/add-p-fix-memory-leak-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/729add-patch.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)add-patch.c +16
-8@@ -266,6 +266,20 @@ struct add_p_state {const char *revision; }; +static void add_p_state_clear (struct add_p_state *s) +{ +size_t i; + +strbuf_release (&s->answer); +strbuf_release (&s->buf); +strbuf_release (&s->plain); +strbuf_release (&s->colored); +for (i =0 ; i < s->file_diff_nr; i++) +free (s->file_diff[i].hunk); +free (s->file_diff); +clear_add_i_state (&s->s); +} +static void err (struct add_p_state *s,const char *fmt, ...) {va_list args;@@ -1690,9 +1704,7 @@ int run_add_p(struct repository *r, enum add_p_mode mode, repo_refresh_and_write_index(r, REFRESH_QUIET, 0, 1, NULL, NULL, NULL) < 0) || parse_diff(&s, ps) < 0) { -strbuf_release (&s.plain); -strbuf_release (&s.colored); -clear_add_i_state (&s.s); +add_p_state_clear (&s);return -1 ; }@@ -1707,10 +1719,6 @@ int run_add_p(struct repository *r, enum add_p_mode mode,else if (binary_count == s.file_diff_nr)fprintf (stderr,_ ("Only binary files changed.\n" )); -strbuf_release (&s.answer); -strbuf_release (&s.buf); -strbuf_release (&s.plain); -strbuf_release (&s.colored); -clear_add_i_state (&s.s); +add_p_state_clear (&s);return 0 ; }base-commit:
3a238e539bcdfe3f9eb5010fd218640c1b499f7a--
gitgitgadget