Browse Source

for-each-ref: fix segfault in copy_email

You can trigger a segfault in git.git by doing:

  git for-each-ref --format='%(taggeremail)' refs/tags/v0.99

The v0.99 tag is special in that it contains no "tagger"
header.

The bug is obvious in copy_email, which carefully checks to
make sure the result of a strchr is non-NULL, but only after
already having used it to perform other work. The fix is to
move the check up.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 16 years ago committed by Junio C Hamano
parent
commit
e64c1b0053
  1. 7
      builtin-for-each-ref.c

7
builtin-for-each-ref.c

@ -339,8 +339,11 @@ static const char *copy_name(const char *buf) @@ -339,8 +339,11 @@ static const char *copy_name(const char *buf)
static const char *copy_email(const char *buf)
{
const char *email = strchr(buf, '<');
const char *eoemail = strchr(email, '>');
if (!email || !eoemail)
const char *eoemail;
if (!email)
return "";
eoemail = strchr(email, '>');
if (!eoemail)
return "";
return xmemdupz(email, eoemail + 1 - email);
}

Loading…
Cancel
Save