Skip to content

Commit 3ad8d3e

Browse files
committed
Merge branch 'pw/add-p-leakfix'
Leakfix. * pw/add-p-leakfix: add -p: fix memory leak
2 parents e96b271 + 324efcf commit 3ad8d3e

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

add-patch.c

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,20 @@ struct add_p_state {
266266
const char *revision;
267267
};
268268

269+
static void add_p_state_clear(struct add_p_state *s)
270+
{
271+
size_t i;
272+
273+
strbuf_release(&s->answer);
274+
strbuf_release(&s->buf);
275+
strbuf_release(&s->plain);
276+
strbuf_release(&s->colored);
277+
for (i = 0; i < s->file_diff_nr; i++)
278+
free(s->file_diff[i].hunk);
279+
free(s->file_diff);
280+
clear_add_i_state(&s->s);
281+
}
282+
269283
static void err(struct add_p_state *s, const char *fmt, ...)
270284
{
271285
va_list args;
@@ -1690,9 +1704,7 @@ int run_add_p(struct repository *r, enum add_p_mode mode,
16901704
repo_refresh_and_write_index(r, REFRESH_QUIET, 0, 1,
16911705
NULL, NULL, NULL) < 0) ||
16921706
parse_diff(&s, ps) < 0) {
1693-
strbuf_release(&s.plain);
1694-
strbuf_release(&s.colored);
1695-
clear_add_i_state(&s.s);
1707+
add_p_state_clear(&s);
16961708
return -1;
16971709
}
16981710

@@ -1707,10 +1719,6 @@ int run_add_p(struct repository *r, enum add_p_mode mode,
17071719
else if (binary_count == s.file_diff_nr)
17081720
fprintf(stderr, _("Only binary files changed.\n"));
17091721

1710-
strbuf_release(&s.answer);
1711-
strbuf_release(&s.buf);
1712-
strbuf_release(&s.plain);
1713-
strbuf_release(&s.colored);
1714-
clear_add_i_state(&s.s);
1722+
add_p_state_clear(&s);
17151723
return 0;
17161724
}

0 commit comments

Comments
 (0)