Re: 'git mailinfo' whitespace bug
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Feb 20, 2010, 05:51 UTC
- Message-ID
- <7vzl343160.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <alpine.LFD.2.00.1002180936240.4141@localhost.localdomain>
Linus Torvalds <torvalds@linux-foundation.org> writes:
Show 9 quoted lines
> I bisected it, and this bug was introduced almost two years ago. In commit
> 3b6121f69b2 ("git-mailinfo: use strbuf's instead of fixed buffers"), to be
> exact. I'm pretty sure the bug is that handle_commit_msg() was changed to
> use 'strbuf_ltrim()' for the 'still_looking' case.
>
> Before commit 3b6121f69b2, it would create a new variable that had the
> trimmed results ("char *cp = line;"), after that commit it would just trim
> the line itself. Which is correct for the case of it being a header, but
> if it's the first non-header line, it's wrong.True; trimming the body is obviously wrong.
But when is it correct to ltrim a header line? It means we are going to accept a header (or header-looking line in body) that is indented. I don't know why 87ab799 (builtin-mailinfo.c 2007-03-12) was coded that way.
builtin-mailinfo.c | 3 +-- t/t5100/msg0015 | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/builtin-mailinfo.c b/builtin-mailinfo.c index a50ac22..ce2ef6b 100644 --- a/builtin-mailinfo.c +++ b/builtin-mailinfo.c @@ -779,8 +779,7 @@ static int handle_commit_msg(struct strbuf *line) return 0; if (still_looking) { - strbuf_ltrim(line); - if (!line->len) + if (!line->len || (line->len == 1 && line->buf[0] == '\n')) return 0; } diff --git a/t/t5100/msg0015 b/t/t5100/msg0015 index 9577238..4abb3d5 100644 --- a/t/t5100/msg0015 +++ b/t/t5100/msg0015 @@ -1,2 +1,2 @@ -- a list + - a list - of stuff