From 2b5f07f16c9e554482ed4a2355a051feabd62848 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ren=C3=A9=20Scharfe?= Date: Thu, 6 Oct 2011 18:14:55 +0200 Subject: [PATCH] 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 --- diffcore-pickaxe.c | 13 ++++++------- 1 file 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; } -- 2.30.2