Re: Serious bug with pretty format strings & empty bodies?
- From
René Scharfe <rene.scharfe@lsrfire.ath.cx>
- Date
- Dec 20, 2007, 12:20 UTC
- Message-ID
- <476A5DFF.40803@lsrfire.ath.cx>
- In-Reply-To
- <57518fd10712200244o656c7f44j426cc71c89515de3@mail.gmail.com>
Jonathan del Strother schrieb:
> On Dec 19, 2007 11:23 PM, René Scharfe <rene.scharfe@lsrfire.ath.cx> wrote: >> Just a shot in the dark: does this patch on top of master make a difference? > No luck with that, I'm afraid.
And how is this one?
The first chunk is the same as in the last try -- it guards against commit messages ending with a NUL without a prior \n _and_ being followed by a \n (in memory which shouldn't be accessed by us at all as it doesn't belong to the commit message). I guess that's quite rare.
The second chunk keeps the body offset from being incremented by the for loop if we've already found a terminating NUL.
diff --git a/pretty.c b/pretty.c index 9db75b4..5b1078b 100644 --- a/pretty.c +++ b/pretty.c @@ -412,7 +412,7 @@ static void parse_commit_header(struct format_commit_context *context) if (i == eol) { state++; /* strip empty lines */ - while (msg[eol + 1] == '\n') + while (msg[eol] == '\n' && msg[eol + 1] == '\n') eol++; } else if (!prefixcmp(msg + i, "author ")) { context->author.off = i + 7; @@ -425,6 +425,8 @@ static void parse_commit_header(struct format_commit_context *context) context->encoding.len = eol - i - 9; } i = eol; + if (!msg[i]) + break; } context->body_off = i; context->commit_header_parsed = 1;