summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Mischa POSLAWSKY <git@shiar.nl>2019-08-17 23:51:07 +0200
committerLibravatar Junio C Hamano <gitster@pobox.com>2019-08-22 11:14:45 -0700
commit8b3f33ef11821a6a030f789eeb0b3af01469901e (patch)
treea710c9104ba7225ed3c27b917519fca2c2b6ed31
parentGit 2.20.1 (diff)
downloadtgif-8b3f33ef11821a6a030f789eeb0b3af01469901e.tar.xz
ref-filter: initialize empty name or email fields
Formatting $(taggername) on headerless tags such as v0.99 in Git causes a SIGABRT with error "munmap_chunk(): invalid pointer", because of an oversight in commit f0062d3b74 (ref-filter: free item->value and item->value->s, 2018-10-19). Signed-off-by: Mischa POSLAWSKY <git@shiar.nl> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--ref-filter.c6
-rwxr-xr-xt/t6300-for-each-ref.sh19
2 files changed, 22 insertions, 3 deletions
diff --git a/ref-filter.c b/ref-filter.c
index 5de616befe..3116f74225 100644
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -976,7 +976,7 @@ static const char *copy_name(const char *buf)
if (!strncmp(cp, " <", 2))
return xmemdupz(buf, cp - buf);
}
- return "";
+ return xstrdup("");
}
static const char *copy_email(const char *buf)
@@ -984,10 +984,10 @@ static const char *copy_email(const char *buf)
const char *email = strchr(buf, '<');
const char *eoemail;
if (!email)
- return "";
+ return xstrdup("");
eoemail = strchr(email, '>');
if (!eoemail)
- return "";
+ return xstrdup("");
return xmemdupz(email, eoemail + 1 - email);
}
diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh
index 97bfbee6e8..dc1c2e3152 100755
--- a/t/t6300-for-each-ref.sh
+++ b/t/t6300-for-each-ref.sh
@@ -485,6 +485,25 @@ test_expect_success 'Check ambiguous head and tag refs II (loose)' '
test_cmp expected actual
'
+test_expect_success 'create tag without tagger' '
+ git tag -a -m "Broken tag" taggerless &&
+ git tag -f taggerless $(git cat-file tag taggerless |
+ sed -e "/^tagger /d" |
+ git hash-object --stdin -w -t tag)
+'
+
+test_atom refs/tags/taggerless type 'commit'
+test_atom refs/tags/taggerless tag 'taggerless'
+test_atom refs/tags/taggerless tagger ''
+test_atom refs/tags/taggerless taggername ''
+test_atom refs/tags/taggerless taggeremail ''
+test_atom refs/tags/taggerless taggerdate ''
+test_atom refs/tags/taggerless committer ''
+test_atom refs/tags/taggerless committername ''
+test_atom refs/tags/taggerless committeremail ''
+test_atom refs/tags/taggerless committerdate ''
+test_atom refs/tags/taggerless subject 'Broken tag'
+
test_expect_success 'an unusual tag with an incomplete line' '
git tag -m "bogo" bogo &&