]> git.ipfire.org Git - thirdparty/git.git/commitdiff
revision: fix memory leak in prepare_show_merge()
authorLidong Yan <502024330056@smail.nju.edu.cn>
Tue, 10 Jun 2025 00:37:59 +0000 (00:37 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 10 Jun 2025 03:41:17 +0000 (20:41 -0700)
In revision.c:prepare_show_merge(), we allocated an array in prune
but forget to free it. Since parse_pathspec is not responsible to
free prune, we should add `free(prune)` in the end of prepare_show_merge().

Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
revision.c
t/t7007-show.sh

index c4390f0938cbdeb3a08a310cf2ca5aaed944d377..b5db2d764a7571542e5852012a36d35cc8b5e184 100644 (file)
@@ -2068,6 +2068,7 @@ static void prepare_show_merge(struct rev_info *revs)
        parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,
                       PATHSPEC_PREFER_FULL | PATHSPEC_LITERAL_PATH, "", prune);
        revs->limited = 1;
+       free(prune);
 }
 
 static int dotdot_missing(const char *arg, char *dotdot,
index d6cc69e0f2cbd576ff6ff81720de63f1e9cf86bf..2d322b53d16e18cc050c3aa78164083ca88bb535 100755 (executable)
@@ -167,4 +167,28 @@ test_expect_success 'show --graph is forbidden' '
   test_must_fail git show --graph HEAD
 '
 
+test_expect_success 'show unmerged index' '
+       git reset --hard &&
+
+       git switch -C base &&
+       echo "base" >conflicting &&
+       git add conflicting &&
+       git commit -m "base" &&
+
+       git branch hello &&
+       git branch goodbye &&
+
+       git switch hello &&
+       echo "hello" >conflicting &&
+       git commit -am "hello" &&
+
+       git switch goodbye &&
+       echo "goodbye" >conflicting &&
+       git commit -am "goodbye" &&
+
+       git switch hello &&
+       test_must_fail git merge goodbye &&
+       git show --merge HEAD
+'
+
 test_done