aboutsummaryrefslogtreecommitdiff
path: root/object/tree
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-07 11:53:54 +0000
committerGravatar Runxi Yu2026-06-07 11:53:54 +0000
commit73ce5600f1954c751fc9e59ca5666d996b7b9420 (patch)
treeb1b8f44ac65c1f1a5e07d9e6a9463ee632fa9e4a /object/tree
parentobject/tag: Fix my silly self-referential append test, that belongs to roundtrip (diff)
signatureNo signature
object/tree: Reject duplicates
Diffstat (limited to 'object/tree')
-rw-r--r--object/tree/parse.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/object/tree/parse.go b/object/tree/parse.go
index b1069918..90519705 100644
--- a/object/tree/parse.go
+++ b/object/tree/parse.go
@@ -17,6 +17,7 @@ import (
func Parse(body []byte, objectFormat id.ObjectFormat) (*Tree, error) {
tree := new(Tree)
idSize := objectFormat.Size()
+ seen := make(map[string]struct{})
i := 0
for i < len(body) {
@@ -65,6 +66,12 @@ func Parse(body []byte, objectFormat id.ObjectFormat) (*Tree, error) {
}
}
+ if _, dup := seen[entry.Name]; dup {
+ return nil, fmt.Errorf("%w: duplicate entry name %q", ErrInvalidTree, entry.Name)
+ }
+
+ seen[entry.Name] = struct{}{}
+
tree.entries = append(tree.entries, entry)
}