From: Lidong Yan <502024330056@smail.nju.edu.cn> Date: Wed, 14 May 2025 13:53:28 +0000 (+0000) Subject: sequencer: fix memory leak if `todo_list_rearrange_squash()` failed X-Git-Tag: v2.50.0-rc0~15^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=044511f889b1989840339a322f84e50dfa3bf6e0;p=thirdparty%2Fgit.git sequencer: fix memory leak if `todo_list_rearrange_squash()` failed In sequencer.c:todo_list_rearrange_squash, if it fails, memory allocated in `next`, `tail`, `subjects` and `subject2item` will leak. Jump to cleanup label before return could fix this leak problem. Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn> Signed-off-by: Junio C Hamano --- diff --git a/sequencer.c b/sequencer.c index b5c4043757..5fb7b68a7a 100644 --- a/sequencer.c +++ b/sequencer.c @@ -6596,6 +6596,7 @@ int todo_list_rearrange_squash(struct todo_list *todo_list) char **subjects; struct commit_todo_item commit_todo; struct todo_item *items = NULL; + int ret = 0; init_commit_todo_item(&commit_todo); /* @@ -6626,8 +6627,8 @@ int todo_list_rearrange_squash(struct todo_list *todo_list) } if (is_fixup(item->command)) { - clear_commit_todo_item(&commit_todo); - return error(_("the script was already rearranged.")); + ret = error(_("the script was already rearranged.")); + goto cleanup; } repo_parse_commit(the_repository, item->commit); @@ -6729,6 +6730,7 @@ int todo_list_rearrange_squash(struct todo_list *todo_list) todo_list->items = items; } +cleanup: free(next); free(tail); for (i = 0; i < todo_list->nr; i++) @@ -6738,7 +6740,7 @@ int todo_list_rearrange_squash(struct todo_list *todo_list) clear_commit_todo_item(&commit_todo); - return 0; + return ret; } int sequencer_determine_whence(struct repository *r, enum commit_whence *whence)