diff options
| author | 2026-03-04 08:26:56 +0800 | |
|---|---|---|
| committer | 2026-03-04 08:59:53 +0800 | |
| commit | ab7501be34032fb9e5c48726a68ae90a917af9eb (patch) | |
| tree | 20d005647569befea8133e953c3270e8fd2a2a5b /object/tag_parse.go | |
| parent | *: gofumpt (diff) | |
| signature | No signature | |
*: Lint
Diffstat (limited to 'object/tag_parse.go')
| -rw-r--r-- | object/tag_parse.go | 10 |
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 } |
