Merge branch 'jk/ref-filter-parsing-bugs'

Various tests exercising the transfer.credentialsInUrl configuration
are taught to avoid making requests which require resolving localhost
to reduce CI-flakiness.

* jk/ref-filter-parsing-bugs:
  ref-filter: fix parsing of signatures with CRLF and no body
  ref-filter: fix parsing of signatures without blank lines
This commit is contained in:
Taylor Blau 2022-11-08 17:14:52 -05:00
commit 15df8418a5
2 changed files with 44 additions and 4 deletions

View File

@ -1375,12 +1375,12 @@ static void find_subpos(const char *buf,
/* subject is first non-empty line */
*sub = buf;
/* subject goes to first empty line before signature begins */
if ((eol = strstr(*sub, "\n\n"))) {
if ((eol = strstr(*sub, "\n\n")) ||
(eol = strstr(*sub, "\r\n\r\n"))) {
eol = eol < sigstart ? eol : sigstart;
/* check if message uses CRLF */
} else if (! (eol = strstr(*sub, "\r\n\r\n"))) {
} else {
/* treat whole message as subject */
eol = strrchr(*sub, '\0');
eol = sigstart;
}
buf = eol;
*sublen = buf - *sub;

View File

@ -1406,4 +1406,44 @@ test_expect_success 'for-each-ref reports broken tags' '
refs/tags/broken-tag-*
'
test_expect_success 'set up tag with signature and no blank lines' '
git tag -F - fake-sig-no-blanks <<-\EOF
this is the subject
-----BEGIN PGP SIGNATURE-----
not a real signature, but we just care about the
subject/body parsing. It is important here that
there are no blank lines in the signature.
-----END PGP SIGNATURE-----
EOF
'
test_atom refs/tags/fake-sig-no-blanks contents:subject 'this is the subject'
test_atom refs/tags/fake-sig-no-blanks contents:body ''
test_atom refs/tags/fake-sig-no-blanks contents:signature "$sig"
test_expect_success 'set up tag with CRLF signature' '
append_cr <<-\EOF |
this is the subject
-----BEGIN PGP SIGNATURE-----
not a real signature, but we just care about
the subject/body parsing. It is important here
that there is a blank line separating this
from the signature header.
-----END PGP SIGNATURE-----
EOF
git tag -F - --cleanup=verbatim fake-sig-crlf
'
test_atom refs/tags/fake-sig-crlf contents:subject 'this is the subject'
test_atom refs/tags/fake-sig-crlf contents:body ''
# CRLF is retained in the signature, so we have to pass our expected value
# through append_cr. But test_atom requires a shell string, which means command
# substitution, and the shell will strip trailing newlines from the output of
# the substitution. Hack around it by adding and then removing a dummy line.
sig_crlf="$(printf "%s" "$sig" | append_cr; echo dummy)"
sig_crlf=${sig_crlf%dummy}
test_atom refs/tags/fake-sig-crlf contents:signature "$sig_crlf"
test_done