diff --git a/trie/sync.go b/trie/sync.go index 022c55e433..404d67f154 100644 --- a/trie/sync.go +++ b/trie/sync.go @@ -19,6 +19,7 @@ package trie import ( "errors" "fmt" + "slices" "sync" "github.com/ethereum/go-ethereum/common" @@ -551,12 +552,9 @@ func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { if hasTerm(key) { key = key[:len(key)-1] } - path := make([]byte, len(req.path)+len(key)) - copy(path, req.path) - copy(path[len(req.path):], key) children = []childNode{{ node: node.Val, - path: path, + path: slices.Concat(req.path, key), }} // Mark all internal nodes between shortNode and its **in disk** // child as invalid. This is essential in the case of path mode @@ -596,12 +594,9 @@ func (s *Sync) children(req *nodeRequest, object node) ([]*nodeRequest, error) { case *fullNode: for i := 0; i < 17; i++ { if node.Children[i] != nil { - path := make([]byte, len(req.path)+1) - copy(path, req.path) - path[len(req.path)] = byte(i) children = append(children, childNode{ node: node.Children[i], - path: path, + path: append(slices.Clone(req.path), byte(i)), }) } }