Skip to content

Commit

Permalink
pickaxe: plug regex leak
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
René Scharfe authored and Junio C Hamano committed Oct 7, 2011
1 parent 05ac978 commit 2b5f07f
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions diffcore-pickaxe.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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, &regex, 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
Expand All @@ -138,10 +136,11 @@ static void diffcore_pickaxe_grep(struct diff_options *o)
}
}

regfree(&regex);

free(q->queue);
*q = outq;

out:
regfree(&regex);
return;
}

Expand Down

0 comments on commit 2b5f07f

Please sign in to comment.