James McCoy venit, vidit, dixit 09.10.2015 02:21: > df062010 (filter-branch: avoid passing commit message through sed) > introduced a regression when filtering commits with multi-line headers, > if the header contains a blank line. An example of this is a gpg-signed > commit: > > $ git cat-file commit signed-commit > tree 3d4038e029712da9fc59a72afbfcc90418451630 > parent 110eac945dc1713b27bdf49e74e5805db66971f0 > author A U Thor <author@xxxxxxxxxxx> 1112912413 -0700 > committer C O Mitter <committer@xxxxxxxxxxx> 1112912413 -0700 > gpgsig -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1 > > iEYEABECAAYFAlYXADwACgkQE7b1Hs3eQw23CACgldB/InRyDgQwyiFyMMm3zFpj > pUsAnA+f3aMUsd9mNroloSmlOgL6jIMO > =0Hgm > -----END PGP SIGNATURE----- > > Adding gpg > > As a consequence, "filter-branch --msg-filter cat" (which should leave the > commit message unchanged) spills the signature (after the internal blank > line) into the original commit message. > > The reason is that although the signature is indented, making the line a > whitespace only line, the “read” call is splitting the line based on > the shell's IFS, which defaults to <space><tab><newline>. The leading > space is consumed and $header_line is empty, causing the “skip header > lines” loop to exit. > > The rest of the commit object is then re-used as the rewritten commit > message, causing the new message to include the signature of the > original commit. > > Set IFS to an empty string for the “read” call, thus disabling the word > splitting, which causes $header_line to be set to the non-empty value ' > '. This allows the loop to fully consume the header lines before > emitting the original, intact commit message. > > Signed-off-by: James McCoy <vega.james@xxxxxxxxx> > --- Thanks for hanging in :) Reviewed-by: Michael J Gruber <git@xxxxxxxxxxxxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html