aboutsummaryrefslogtreecommitdiff
path: root/object/tag_parse.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-04 08:26:56 +0800
committerGravatar Runxi Yu2026-03-04 08:59:53 +0800
commitab7501be34032fb9e5c48726a68ae90a917af9eb (patch)
tree20d005647569befea8133e953c3270e8fd2a2a5b /object/tag_parse.go
parent*: gofumpt (diff)
signatureNo signature
*: Lint
Diffstat (limited to 'object/tag_parse.go')
-rw-r--r--object/tag_parse.go10
1 files changed, 10 insertions, 0 deletions
diff --git a/object/tag_parse.go b/object/tag_parse.go
index ea194085..c2fee81a 100644
--- a/object/tag_parse.go
+++ b/object/tag_parse.go
@@ -13,6 +13,7 @@ import (
func ParseTag(body []byte, algo objectid.Algorithm) (*Tag, error) {
t := new(Tag)
i := 0
+
var haveTarget, haveType bool
for i < len(body) {
@@ -20,8 +21,10 @@ func ParseTag(body []byte, algo objectid.Algorithm) (*Tag, error) {
if rel < 0 {
return nil, errors.New("object: tag: missing newline")
}
+
line := body[i : i+rel]
i += rel + 1
+
if len(line) == 0 {
break
}
@@ -37,6 +40,7 @@ func ParseTag(body []byte, algo objectid.Algorithm) (*Tag, error) {
if err != nil {
return nil, fmt.Errorf("object: tag: object: %w", err)
}
+
t.Target = id
haveTarget = true
case "type":
@@ -44,6 +48,7 @@ func ParseTag(body []byte, algo objectid.Algorithm) (*Tag, error) {
if !ok {
return nil, errors.New("object: tag: unknown target type")
}
+
t.TargetType = ty
haveType = true
case "tag":
@@ -53,6 +58,7 @@ func ParseTag(body []byte, algo objectid.Algorithm) (*Tag, error) {
if err != nil {
return nil, fmt.Errorf("object: tag: tagger: %w", err)
}
+
t.Tagger = idt
case "gpgsig", "gpgsig-sha256":
for i < len(body) {
@@ -60,9 +66,11 @@ func ParseTag(body []byte, algo objectid.Algorithm) (*Tag, error) {
if nextRel < 0 {
return nil, errors.New("object: tag: unterminated gpgsig")
}
+
if body[i] != ' ' {
break
}
+
i += nextRel + 1
}
default:
@@ -73,6 +81,8 @@ func ParseTag(body []byte, algo objectid.Algorithm) (*Tag, error) {
if !haveTarget || !haveType {
return nil, errors.New("object: tag: missing required headers")
}
+
t.Message = append([]byte(nil), body[i:]...)
+
return t, nil
}