aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrick Steinhardt <ps@pks.im>2024-11-05 07:16:50 +0100
committerJunio C Hamano <gitster@pobox.com>2024-11-04 22:37:52 -0800
commita6590ccdd431e2ab7b9c521cac674546725a54d2 (patch)
tree13f495a5637b5d661ef680eb96c3061a71e962fe
parentee3e8c3afa5f432c5232aba80a07b0884d388381 (diff)
downloadgit-a6590ccdd431e2ab7b9c521cac674546725a54d2.tar.gz
grep: fix leak in `grep_splice_or()`
In `grep_splice_or()` we search for the next `TRUE` node in our tree of grep expressions and replace it with the given new expression. But we don't free the old node, which causes a memory leak. Plug it. This leak is exposed by t7810, but plugging it alone isn't sufficient to make the test suite pass. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--grep.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/grep.c b/grep.c
index 701e58de04..e9337f32cb 100644
--- a/grep.c
+++ b/grep.c
@@ -756,6 +756,7 @@ static struct grep_expr *grep_splice_or(struct grep_expr *x, struct grep_expr *y
assert(x->node == GREP_NODE_OR);
if (x->u.binary.right &&
x->u.binary.right->node == GREP_NODE_TRUE) {
+ free(x->u.binary.right);
x->u.binary.right = y;
break;
}