diff options
-rw-r--r-- | builtin/tag.c | 22 | ||||
-rwxr-xr-x | t/t7004-tag.sh | 13 |
2 files changed, 25 insertions, 10 deletions
diff --git a/builtin/tag.c b/builtin/tag.c index 1e27f5c3d6..6ca53e3310 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -95,19 +95,20 @@ static void show_tag_lines(const unsigned char *sha1, int lines) buf = read_sha1_file(sha1, &type, &size); if (!buf) die_errno("unable to read object %s", sha1_to_hex(sha1)); - if (!size) { - free(buf); - return; - } + if (type != OBJ_COMMIT && type != OBJ_TAG) + goto free_return; + if (!size) + die("an empty %s object %s?", + typename(type), sha1_to_hex(sha1)); /* skip header */ sp = strstr(buf, "\n\n"); - if (!sp) { - free(buf); - return; - } - /* only take up to "lines" lines, and strip the signature */ - size = parse_signature(buf, size); + if (!sp) + goto free_return; + + /* only take up to "lines" lines, and strip the signature from a tag */ + if (type == OBJ_TAG) + size = parse_signature(buf, size); for (i = 0, sp += 2; i < lines && sp < buf + size; i++) { if (i) printf("\n "); @@ -118,6 +119,7 @@ static void show_tag_lines(const unsigned char *sha1, int lines) break; sp = eol + 1; } +free_return: free(buf); } diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh index 097ce2bc83..7687e62cc5 100755 --- a/t/t7004-tag.sh +++ b/t/t7004-tag.sh @@ -585,6 +585,19 @@ test_expect_success \ test_cmp expect actual ' +test_expect_success 'annotations for blobs are empty' ' + blob=$(git hash-object -w --stdin <<-\EOF + Blob paragraph 1. + + Blob paragraph 2. + EOF + ) && + git tag tag-blob $blob && + echo "tag-blob " >expect && + git tag -n1 -l tag-blob >actual && + test_cmp expect actual +' + # subsequent tests require gpg; check if it is available gpg --version >/dev/null 2>/dev/null if [ $? -eq 127 ]; then |