revision: fix memory leak in prepare_show_merge()
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>
Lidong Yan committed
Jun 10, 2025 at 00:37 UTC
a3d278bb6457fa33461891a8f0a4ccffaf0f5296
2 files changed
+25
revision.c
+1
@@ -2068,6 +2068,7 @@ static void prepare_show_merge(struct rev_info *revs)
2068
parse_pathspec(&revs->prune_data, PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,
2069
PATHSPEC_PREFER_FULL | PATHSPEC_LITERAL_PATH, "", prune);
2070
revs->limited = 1;
2071
+ free(prune);
2072
}
2073
2074
static int dotdot_missing(const char *arg, char *dotdot,
t/t7007-show.sh
+24
@@ -167,4 +167,28 @@ test_expect_success 'show --graph is forbidden' '
167
test_must_fail git show --graph HEAD
168
'
169
170
+test_expect_success 'show unmerged index' '
171
+ git reset --hard &&
172
+
173
+ git switch -C base &&
174
+ echo "base" >conflicting &&
175
+ git add conflicting &&
176
+ git commit -m "base" &&
177
+
178
+ git branch hello &&
179
+ git branch goodbye &&
180
+
181
+ git switch hello &&
182
+ echo "hello" >conflicting &&
183
+ git commit -am "hello" &&
184
+
185
+ git switch goodbye &&
186
+ echo "goodbye" >conflicting &&
187
+ git commit -am "goodbye" &&
188
+
189
+ git switch hello &&
190
+ test_must_fail git merge goodbye &&
191
+ git show --merge HEAD
192
+'
193
+
194
test_done