diff options
author | René Scharfe <rene.scharfe@lsrfire.ath.cx> | 2011-10-06 18:14:55 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-10-07 15:46:13 -0700 |
commit | 2b5f07f16c9e554482ed4a2355a051feabd62848 (patch) | |
tree | da99a54b6d9e3988ff422a6e7f677c88be3aaa23 /diffcore-pickaxe.c | |
parent | 05ac978495e84fe03d91ab591524b7ea138900ed (diff) | |
download | git-2b5f07f16c9e554482ed4a2355a051feabd62848.tar.gz git-2b5f07f16c9e554482ed4a2355a051feabd62848.tar.xz |
pickaxe: plug regex leak
With -G... --pickaxe-all, free the regex before returning even if we
found a match. Also get rid of the variable has_changes, as we can
simply break out of the loop.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'diffcore-pickaxe.c')
-rw-r--r-- | diffcore-pickaxe.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c index 0835a3be8..96f7ea67d 100644 --- a/diffcore-pickaxe.c +++ b/diffcore-pickaxe.c @@ -96,7 +96,7 @@ static int diff_grep(struct diff_filepair *p, regex_t *regexp, struct diff_optio static void diffcore_pickaxe_grep(struct diff_options *o) { struct diff_queue_struct *q = &diff_queued_diff; - int i, has_changes, err; + int i, err; regex_t regex; struct diff_queue_struct outq; outq.queue = NULL; @@ -112,13 +112,11 @@ static void diffcore_pickaxe_grep(struct diff_options *o) if (o->pickaxe_opts & DIFF_PICKAXE_ALL) { /* Showing the whole changeset if needle exists */ - for (i = has_changes = 0; !has_changes && i < q->nr; i++) { + for (i = 0; i < q->nr; i++) { struct diff_filepair *p = q->queue[i]; if (diff_grep(p, ®ex, o)) - has_changes++; + goto out; /* do not munge the queue */ } - if (has_changes) - return; /* do not munge the queue */ /* * Otherwise we will clear the whole queue by copying @@ -138,10 +136,11 @@ static void diffcore_pickaxe_grep(struct diff_options *o) } } - regfree(®ex); - free(q->queue); *q = outq; + + out: + regfree(®ex); return; } |