]> git.ipfire.org Git - thirdparty/git.git/commitdiff
http-push: trim trailing newline from remote symref
authorJeff King <peff@peff.net>
Tue, 13 Jan 2015 02:28:58 +0000 (21:28 -0500)
committerJunio C Hamano <gitster@pobox.com>
Wed, 14 Jan 2015 18:28:02 +0000 (10:28 -0800)
When we fetch a symbolic ref file from the remote, we get
the whole string "ref: refs/heads/master\n", recognize it by
skipping past the "ref: ", and store the rest. We should
chomp the trailing newline.

This bug was introduced in ae021d8 (use skip_prefix to avoid
magic numbers, 2014-06-18), which did not notice that the
length computation fed to xmemdupz was quietly tweaked by 1
to account for this.

We can solve it by explicitly trimming the newline, which is
more obvious. Note that we use strbuf_rtrim here, which will
actually cut off any trailing whitespace, not just a single
newline. This is a good thing, though, as it makes our
parsing more liberal (and spaces are not valid in refnames
anyway).

Signed-off-by: Jeff King <peff@peff.net>
Tested-by: Kyle J. McKay <mackyle@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
http-push.c

index 952f8ede49daf4e275c42cc0682bb01c4c58446a..0beb7ab67ffc93a6c8fe8517d711945e2c033b7d 100644 (file)
@@ -1577,6 +1577,9 @@ static void fetch_symref(const char *path, char **symref, unsigned char *sha1)
        if (buffer.len == 0)
                return;
 
+       /* Cut off trailing newline. */
+       strbuf_rtrim(&buffer);
+
        /* If it's a symref, set the refname; otherwise try for a sha1 */
        if (skip_prefix(buffer.buf, "ref: ", &name)) {
                *symref = xmemdupz(name, buffer.len - (name - buffer.buf));