From: RenĂ© Scharfe Date: Thu, 6 Oct 2011 16:14:55 +0000 (+0200) Subject: pickaxe: plug regex leak X-Git-Tag: v1.7.8-rc0~38^2~5 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=2b5f07f16c9e554482ed4a2355a051feabd62848;p=git.git 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 Signed-off-by: Junio C Hamano --- 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; }