mktag: use fsck instead of custom verify_tag()
Change the validation logic in "mktag" to use fsck's fsck_tag() instead of its own custom parser. Curiously the logic for both dates back to the same commit[1]. Let's unify them so we're not maintaining two sets functions to verify that a tag is OK. The behavior of fsck_tag() and the old "mktag" code being removed here is different in few aspects. I think it makes sense to remove some of those checks, namely: A. fsck only cares that the timezone matches [-+][0-9]{4}. The mktag code disallowed values larger than 1400. Yes there's currently no timezone with a greater offset[2], but since we allow any number of non-offical timezones (e.g. +1234) passing this through seems fine. Git also won't break in the future if e.g. French Polynesia decides it needs to outdo the Line Islands when it comes to timezone extravagance. B. fsck allows missing author names such as "tagger <email>", mktag wouldn't, but would allow e.g. "tagger [2 spaces] <email>" (but not "tagger [1 space] <email>"). Now we allow all of these. C. Like B, but "mktag" disallowed spaces in the <email> part, fsck allows it. In some ways fsck_tag() is stricter than "mktag" was, namely: D. fsck disallows zero-padded dates, but mktag didn't care. So e.g. the timestamp "0000000000 +0000" produces an error now. A test in "t1006-cat-file.sh" relied on this, it's been changed to use "hash-object" (without fsck) instead. There was one check I deemed worth keeping by porting it over to fsck_tag(): E. "mktag" did not allow any custom headers, and by extension (as an empty commit is allowed) also forbade an extra stray trailing newline after the headers it knew about. Add a new check in the "ignore" category to fsck and use it. This somewhat abuses the facility added inefaba7cc77
(fsck: optionally ignore specific fsck issues completely, 2015-06-22). This is somewhat of hack, but probably the least invasive change we can make here. The fsck command will shuffle these categories around, e.g. under --strict the "info" becomes a "warn" and "warn" becomes "error". Existing users of fsck's (and others, e.g. index-pack) --strict option rely on this. So we need to put something into a category that'll be ignored by all existing users of the API. Pretending that fsck.extraHeaderEntry=error ("ignore" by default) was set serves to do this for us. 1.ec4465adb3
(Add "tag" objects that can be used to sign other objects., 2005-04-25) 2. https://en.wikipedia.org/wiki/List_of_UTC_time_offsets Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
40ef015a27
commit
acf9de4c94
@ -53,7 +53,7 @@ too short for a tag
|
||||
EOF
|
||||
|
||||
check_verify_failure 'Tag object length check' \
|
||||
'^error: .*size wrong.*$'
|
||||
'^error:.* missingObject:'
|
||||
|
||||
############################################################
|
||||
# 2. object line label check
|
||||
@ -66,7 +66,7 @@ tagger . <> 0 +0000
|
||||
|
||||
EOF
|
||||
|
||||
check_verify_failure '"object" line label check' '^error: char0: .*"object "$'
|
||||
check_verify_failure '"object" line label check' '^error:.* missingObject:'
|
||||
|
||||
############################################################
|
||||
# 3. object line hash check
|
||||
@ -79,7 +79,7 @@ tagger . <> 0 +0000
|
||||
|
||||
EOF
|
||||
|
||||
check_verify_failure '"object" line SHA1 check' '^error: char7: .*SHA1 hash$'
|
||||
check_verify_failure '"object" line check' '^error:.* badObjectSha1:'
|
||||
|
||||
############################################################
|
||||
# 4. type line label check
|
||||
@ -92,7 +92,7 @@ tagger . <> 0 +0000
|
||||
|
||||
EOF
|
||||
|
||||
check_verify_failure '"type" line label check' '^error: char.*: .*"\\ntype "$'
|
||||
check_verify_failure '"type" line label check' '^error:.* missingTypeEntry:'
|
||||
|
||||
############################################################
|
||||
# 5. type line eol check
|
||||
@ -100,7 +100,7 @@ check_verify_failure '"type" line label check' '^error: char.*: .*"\\ntype "$'
|
||||
echo "object $head" >tag.sig
|
||||
printf "type tagsssssssssssssssssssssssssssssss" >>tag.sig
|
||||
|
||||
check_verify_failure '"type" line eol check' '^error: char.*: .*"\\n"$'
|
||||
check_verify_failure '"type" line eol check' '^error:.* unterminatedHeader:'
|
||||
|
||||
############################################################
|
||||
# 6. tag line label check #1
|
||||
@ -114,7 +114,7 @@ tagger . <> 0 +0000
|
||||
EOF
|
||||
|
||||
check_verify_failure '"tag" line label check #1' \
|
||||
'^error: char.*: no "tag " found$'
|
||||
'^error:.* missingTagEntry:'
|
||||
|
||||
############################################################
|
||||
# 7. tag line label check #2
|
||||
@ -126,7 +126,7 @@ tag
|
||||
EOF
|
||||
|
||||
check_verify_failure '"tag" line label check #2' \
|
||||
'^error: char.*: no "tag " found$'
|
||||
'^error:.* badType:'
|
||||
|
||||
############################################################
|
||||
# 8. type line type-name length check
|
||||
@ -138,7 +138,7 @@ tag mytag
|
||||
EOF
|
||||
|
||||
check_verify_failure '"type" line type-name length check' \
|
||||
'^error: char.*: type too long$'
|
||||
'^error:.* badType:'
|
||||
|
||||
############################################################
|
||||
# 9. verify object (hash/type) check
|
||||
@ -152,7 +152,7 @@ tagger . <> 0 +0000
|
||||
EOF
|
||||
|
||||
check_verify_failure 'verify object (hash/type) check -- correct type, nonexisting object' \
|
||||
'^error: char7: could not verify object.*$'
|
||||
'^fatal: could not read tagged object'
|
||||
|
||||
cat >tag.sig <<EOF
|
||||
object $head
|
||||
@ -163,7 +163,7 @@ tagger . <> 0 +0000
|
||||
EOF
|
||||
|
||||
check_verify_failure 'verify object (hash/type) check -- made-up type, valid object' \
|
||||
'^fatal: invalid object type'
|
||||
'^error:.* badType:'
|
||||
|
||||
cat >tag.sig <<EOF
|
||||
object $(test_oid deadbeef)
|
||||
@ -174,7 +174,7 @@ tagger . <> 0 +0000
|
||||
EOF
|
||||
|
||||
check_verify_failure 'verify object (hash/type) check -- made-up type, nonexisting object' \
|
||||
'^error: char7: could not verify object.*$'
|
||||
'^error:.* badType:'
|
||||
|
||||
cat >tag.sig <<EOF
|
||||
object $head
|
||||
@ -185,7 +185,7 @@ tagger . <> 0 +0000
|
||||
EOF
|
||||
|
||||
check_verify_failure 'verify object (hash/type) check -- mismatched type, valid object' \
|
||||
'^error: char7: could not verify object'
|
||||
'^fatal: object.*tagged as.*tree.*but is.*commit'
|
||||
|
||||
############################################################
|
||||
# 9.5. verify object (hash/type) check -- replacement
|
||||
@ -214,7 +214,7 @@ tagger . <> 0 +0000
|
||||
EOF
|
||||
|
||||
check_verify_failure 'verify object (hash/type) check -- mismatched type, valid object' \
|
||||
'^error: char7: could not verify object'
|
||||
'^fatal: object.*tagged as.*tree.*but is.*blob'
|
||||
|
||||
############################################################
|
||||
# 10. verify tag-name check
|
||||
@ -228,7 +228,7 @@ tagger . <> 0 +0000
|
||||
EOF
|
||||
|
||||
check_verify_failure 'verify tag-name check' \
|
||||
'^error: char.*: could not verify tag name$'
|
||||
'^error:.* badTagName:'
|
||||
|
||||
############################################################
|
||||
# 11. tagger line label check #1
|
||||
@ -242,7 +242,7 @@ This is filler
|
||||
EOF
|
||||
|
||||
check_verify_failure '"tagger" line label check #1' \
|
||||
'^error: char.*: could not find "tagger "$'
|
||||
'^error:.* missingTaggerEntry:'
|
||||
|
||||
############################################################
|
||||
# 12. tagger line label check #2
|
||||
@ -257,10 +257,10 @@ This is filler
|
||||
EOF
|
||||
|
||||
check_verify_failure '"tagger" line label check #2' \
|
||||
'^error: char.*: could not find "tagger "$'
|
||||
'^error:.* missingTaggerEntry:'
|
||||
|
||||
############################################################
|
||||
# 13. disallow missing tag author name
|
||||
# 13. allow missing tag author name like fsck
|
||||
|
||||
cat >tag.sig <<EOF
|
||||
object $head
|
||||
@ -271,8 +271,7 @@ tagger <> 0 +0000
|
||||
This is filler
|
||||
EOF
|
||||
|
||||
check_verify_failure 'disallow missing tag author name' \
|
||||
'^error: char.*: missing tagger name$'
|
||||
test_expect_mktag_success 'allow missing tag author name'
|
||||
|
||||
############################################################
|
||||
# 14. disallow missing tag author name
|
||||
@ -287,7 +286,7 @@ tagger T A Gger <
|
||||
EOF
|
||||
|
||||
check_verify_failure 'disallow malformed tagger' \
|
||||
'^error: char.*: malformed tagger field$'
|
||||
'^error:.* badEmail:'
|
||||
|
||||
############################################################
|
||||
# 15. allow empty tag email
|
||||
@ -303,7 +302,7 @@ EOF
|
||||
test_expect_mktag_success 'allow empty tag email'
|
||||
|
||||
############################################################
|
||||
# 16. disallow spaces in tag email
|
||||
# 16. allow spaces in tag email like fsck
|
||||
|
||||
cat >tag.sig <<EOF
|
||||
object $head
|
||||
@ -313,8 +312,7 @@ tagger T A Gger <tag ger@example.com> 0 +0000
|
||||
|
||||
EOF
|
||||
|
||||
check_verify_failure 'disallow spaces in tag email' \
|
||||
'^error: char.*: malformed tagger field$'
|
||||
test_expect_mktag_success 'allow spaces in tag email like fsck'
|
||||
|
||||
############################################################
|
||||
# 17. disallow missing tag timestamp
|
||||
@ -328,7 +326,7 @@ tagger T A Gger <tagger@example.com>__
|
||||
EOF
|
||||
|
||||
check_verify_failure 'disallow missing tag timestamp' \
|
||||
'^error: char.*: missing tag timestamp$'
|
||||
'^error:.* badDate:'
|
||||
|
||||
############################################################
|
||||
# 18. detect invalid tag timestamp1
|
||||
@ -342,7 +340,7 @@ tagger T A Gger <tagger@example.com> Tue Mar 25 15:47:44 2008
|
||||
EOF
|
||||
|
||||
check_verify_failure 'detect invalid tag timestamp1' \
|
||||
'^error: char.*: missing tag timestamp$'
|
||||
'^error:.* badDate:'
|
||||
|
||||
############################################################
|
||||
# 19. detect invalid tag timestamp2
|
||||
@ -356,7 +354,7 @@ tagger T A Gger <tagger@example.com> 2008-03-31T12:20:15-0500
|
||||
EOF
|
||||
|
||||
check_verify_failure 'detect invalid tag timestamp2' \
|
||||
'^error: char.*: malformed tag timestamp$'
|
||||
'^error:.* badDate:'
|
||||
|
||||
############################################################
|
||||
# 20. detect invalid tag timezone1
|
||||
@ -370,7 +368,7 @@ tagger T A Gger <tagger@example.com> 1206478233 GMT
|
||||
EOF
|
||||
|
||||
check_verify_failure 'detect invalid tag timezone1' \
|
||||
'^error: char.*: malformed tag timezone$'
|
||||
'^error:.* badTimezone:'
|
||||
|
||||
############################################################
|
||||
# 21. detect invalid tag timezone2
|
||||
@ -384,10 +382,10 @@ tagger T A Gger <tagger@example.com> 1206478233 + 30
|
||||
EOF
|
||||
|
||||
check_verify_failure 'detect invalid tag timezone2' \
|
||||
'^error: char.*: malformed tag timezone$'
|
||||
'^error:.* badTimezone:'
|
||||
|
||||
############################################################
|
||||
# 22. detect invalid tag timezone3
|
||||
# 22. allow invalid tag timezone3 (the maximum is -1200/+1400)
|
||||
|
||||
cat >tag.sig <<EOF
|
||||
object $head
|
||||
@ -397,8 +395,7 @@ tagger T A Gger <tagger@example.com> 1206478233 -1430
|
||||
|
||||
EOF
|
||||
|
||||
check_verify_failure 'detect invalid tag timezone3' \
|
||||
'^error: char.*: malformed tag timezone$'
|
||||
test_expect_mktag_success 'allow invalid tag timezone'
|
||||
|
||||
############################################################
|
||||
# 23. detect invalid header entry
|
||||
@ -413,7 +410,7 @@ this line should not be here
|
||||
EOF
|
||||
|
||||
check_verify_failure 'detect invalid header entry' \
|
||||
'^error: char.*: trailing garbage in tag header$'
|
||||
'^error:.* extraHeaderEntry:'
|
||||
|
||||
cat >tag.sig <<EOF
|
||||
object $head
|
||||
@ -445,7 +442,7 @@ tagger T A Gger <tagger@example.com> 1206478233 -0500
|
||||
EOF
|
||||
|
||||
check_verify_failure 'require a blank line before an empty body (2)' \
|
||||
'^error: char.*: trailing garbage in tag header$'
|
||||
'^error:.* extraHeaderEntry:'
|
||||
|
||||
############################################################
|
||||
# 24. create valid tag
|
||||
|
Reference in New Issue
Block a user