Re: [PATCH] sequencer: fix memory leak if `update_squash_messages()` failed
- From
lidongyan <502024330056@smail.nju.edu.cn>
- Date
- May 15, 2025, 16:43 UTC
- Message-ID
- <AD5588EE-C935-42E8-9876-F47FB35309D9@smail.nju.edu.cn>
- In-Reply-To
- <xmqqldqx3ky7.fsf@gitster.g>
2025年5月16日 00:20,Junio C Hamano <gitster@pobox.com> 写道:
Show 29 quoted lines
>
> I am curious if Lidong's tool would notice an unreachable code if
> only the first hunk of the attached patch is applied. The "else"
> clause in the second hunk would become unreachable.
>
>
> diff --git c/sequencer.c w/sequencer.c
> index b5c4043757..269637d427 100644
> --- c/sequencer.c
> +++ w/sequencer.c
> @@ -2071,6 +2071,9 @@ static int update_squash_messages(struct repository *r,
> const char *message, *body;
> const char *encoding = get_commit_output_encoding();
>
> + if (!(command == TODO_FIXUP || command == TODO_SQUASH))
> + BUG("update_squash_messages with command %d", command);
> +
> if (ctx->current_fixup_count > 0) {
> struct strbuf header = STRBUF_INIT;
> char *eol;
> @@ -2138,8 +2141,6 @@ static int update_squash_messages(struct repository *r,
> strbuf_addstr(&buf, "\n\n");
> strbuf_add_commented_lines(&buf, body, strlen(body),
> comment_line_str);
> - } else
> - return error(_("unknown command: %d"), command);
> repo_unuse_commit_buffer(r, commit, message);
>
> if (!res)In this case, we do not directly identify the else branch as unreachable code. However, we perform constraint solving on the conditions leading to a potential leak, which ultimately allows us to determine that the leaking path is actually unreachable.