git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 01/10] sequencer.c: remove broken support for rfc2822 continuation in footer

From
Brandon Casey <drafnel@gmail.com>
Date
Jan 22, 2013, 09:35 UTC
Message-ID
<CA+sFfMfERgGbf58LjOfAhhO_-YLu+yo+L-vYMuAuOUaP90yvgA@mail.gmail.com>
In-Reply-To
<20130122075413.GB6085@elie.Belkin>
On Mon, Jan 21, 2013 at 11:54 PM, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 16 quoted lines
> Hi,
>
> Brandon Casey wrote:
>
>> --- a/sequencer.c
>> +++ b/sequencer.c
> [...]
>> @@ -1042,13 +1041,8 @@ static int ends_rfc2822_footer(struct strbuf *sb, int ignore_footer)
>
> Git is checking if (sb->buf) ends with a "Signed-off-by:" style
> line.  If it doesn't, it will need to add an extra blank line
> before adding a new sign-off.
>
> First (snipped), it seeks back two newlines from the end and then
> forward to the next non-newline character, so (buf + i) is at the
> start of the last line of (the interesting part of) sb.
Did you catch that the two newlines have to be adjacent to each other?
 i.e. it seeks back until it finds a blank line.  Then it seeks
forward so that buf + i points at the first line of the last paragraph
of sb.
Show 8 quoted lines
> Now:
>
>>       for (; i < len; i = k) {
>>               for (k = i; k < len && buf[k] != '\n'; k++)
>>                       ; /* do nothing */
>>               k++;
>
> (buf + k) points to the end of this line.

buf + k points to the start of the next line. Not sure if that is the same thing as what you said.

Show 5 quoted lines
>> -             if ((buf[k] == ' ' || buf[k] == '\t') && !first)
>> -                     continue;
>
> This is always the first line examined, so this "continue" never
> triggers.

This is just totally broken and always has been. The index variable should be 'i' not 'k'. It is supposed to check whether the current line is a continuation of the previously inspected line. An rfc2822 continuation line begins with space or tab. The first line of the paragraph obviously can't be a continuation line, so the /first/ variable is used as a guard against matching the first line.

Show 9 quoted lines
>> -
>> -             first = 0;
>> -
>>               for (j = 0; i + j < len; j++) {
>
> If the line matches /^[[:alnum:]-]*:/, it passes and git moves on to
> the (nonexistent) next line.  Otherwise, it fails.
>
> Do I understand correctly?

No, I think you misread the for loop that you snipped out. It seeks back to the beginning of the last paragraph, not the last line. The for loop that you included above, inspects each line of that paragraph. If any line does not match /^[[:alnum:]-]*:/, then the function returns false (0). If every line matches, it returns true (1).

> If so, this patch should be a no-op, which
> is good, I guess.

You're correct here though. The patch is a no-op. This patch removes the code that was supposed to parse rfc2822 continuation lines, but it was broken. Thankfully it was broken utterly and completely so it never allowed anything through that wasn't /^[[:alnum:]-]*:/.

-Brandon
Previous: Jonathan NiederNext: Jonathan Nieder
Message 4 of 31 in “unify appending of sob”
  1. 00/10 unify appending of sobBrandon Casey, Jan 21, 2013
  2. 01/10 sequencer.c: remove broken support for rfc2822 continuation in footerBrandon Casey, Jan 21, 2013
  3. Jonathan NiederJan 22, 2013
  4. Brandon CaseyJan 22, 2013
  5. Jonathan NiederJan 22, 2013
  6. Jonathan NiederJan 22, 2013
  7. Brandon CaseyJan 22, 2013
  8. Jonathan NiederJan 22, 2013
  9. Jonathan NiederJan 22, 2013
  10. 02/10 t/test-lib-functions.sh: allow to specify the tag name to test_commitBrandon Casey, Jan 21, 2013
  11. Jonathan NiederJan 22, 2013
  12. Brandon CaseyJan 22, 2013
  13. 03/10 t/t3511: add some tests of 'cherry-pick -s' functionalityBrandon Casey, Jan 21, 2013
  14. Jonathan NiederJan 22, 2013
  15. Brandon CaseyJan 27, 2013
  16. Jonathan NiederJan 27, 2013
  17. 04/10 sequencer.c: recognize "(cherry picked from ..." as part of s-o-b footerBrandon Casey, Jan 21, 2013
  18. Jonathan NiederJan 22, 2013
  19. Jonathan NiederJan 28, 2013
  20. 05/10 sequencer.c: always separate "(cherry picked from" from commit bodyBrandon Casey, Jan 21, 2013
  21. Jonathan NiederJan 22, 2013
  22. 06/10 sequencer.c: teach append_signoff how to detect duplicate s-o-bBrandon Casey, Jan 21, 2013
  23. Jonathan NiederJan 22, 2013
  24. Brandon CaseyJan 28, 2013
  25. Junio C HamanoJan 28, 2013
  26. Junio C HamanoFeb 9, 2013
  27. Brandon CaseyFeb 9, 2013
  28. 07/10 sequencer.c: teach append_signoff to avoid adding a duplicate newlineBrandon Casey, Jan 21, 2013
  29. 08/10 t4014: more tests about appending s-o-b linesBrandon Casey, Jan 21, 2013
  30. 09/10 format-patch: update append_signoff prototypeBrandon Casey, Jan 21, 2013
  31. 10/10 Unify appending signoff in format-patch, commit and sequencerBrandon Casey, Jan 21, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.