diff --git a/trie/bintrie/hashed_node.go b/trie/bintrie/hashed_node.go index e4d8c2e7ac7d..c5a81e6625d7 100644 --- a/trie/bintrie/hashed_node.go +++ b/trie/bintrie/hashed_node.go @@ -47,6 +47,9 @@ func (h HashedNode) GetValuesAtStem(_ []byte, _ NodeResolverFn) ([][]byte, error } func (h HashedNode) InsertValuesAtStem(stem []byte, values [][]byte, resolver NodeResolverFn, depth int) (BinaryNode, error) { + if depth >= StemSize*8 { + return nil, errors.New("InsertValuesAtStem resolve error: node too deep") + } // Step 1: Generate the path for this node's position in the tree path, err := keyToPath(depth, stem) if err != nil { diff --git a/trie/bintrie/internal_node.go b/trie/bintrie/internal_node.go index 0a7bece521fd..855b8092f801 100644 --- a/trie/bintrie/internal_node.go +++ b/trie/bintrie/internal_node.go @@ -44,7 +44,7 @@ type InternalNode struct { // GetValuesAtStem retrieves the group of values located at the given stem key. func (bt *InternalNode) GetValuesAtStem(stem []byte, resolver NodeResolverFn) ([][]byte, error) { - if bt.depth > 31*8 { + if bt.depth >= StemSize*8 { return nil, errors.New("node too deep") } @@ -134,6 +134,9 @@ func (bt *InternalNode) Hash() common.Hash { // Already-existing values will be overwritten. func (bt *InternalNode) InsertValuesAtStem(stem []byte, values [][]byte, resolver NodeResolverFn, depth int) (BinaryNode, error) { var err error + if bt.depth >= StemSize*8 { + return nil, errors.New("node too deep") + } bit := stem[bt.depth/8] >> (7 - (bt.depth % 8)) & 1 if bit == 0 { if bt.left == nil {