From: Jonathan del Strother Date: Thu, 20 Dec 2007 13:08:37 GMT Subject: Re: Serious bug with pretty format strings & empty bodies? Message-ID: <57518fd10712200508x4b15f9acy10aed83a3cebeba@mail.gmail.com> In-Reply-To: <476A5DFF.40803@lsrfire.ath.cx> On Dec 20, 2007 12:20 PM, René Scharfe wrote: > Jonathan del Strother schrieb: > > On Dec 19, 2007 11:23 PM, René Scharfe 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; > Winnar! Yep, that seems to have fixed things. Wonder how I managed to get the null into the commit message...