mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-18 02:40:45 +00:00
The `decodeRef` function used `size > hashLen` to reject oversized embedded nodes, but this incorrectly allowed nodes of exactly 32 bytes through. The encoding side (hasher.go, stacktrie.go) consistently uses `len(enc) < 32` to decide whether to embed a node inline, meaning nodes of 32+ bytes are always hash-referenced. The error message itself already stated `want size < 32`, confirming the intended threshold. Changed `size > hashLen` to `size >= hashLen` in `decodeRef` to align the decoding validation with the encoding logic, the Yellow Paper spec, and the surrounding comments. Co-authored-by: sashass1315 <sashass1315@gmail.com>
This commit is contained in:
parent
01aafc93bf
commit
2515d6c6c5
1 changed files with 2 additions and 2 deletions
|
|
@ -215,8 +215,8 @@ func decodeRef(buf []byte) (node, []byte, error) {
|
||||||
case kind == rlp.List:
|
case kind == rlp.List:
|
||||||
// 'embedded' Node reference. The encoding must be smaller
|
// 'embedded' Node reference. The encoding must be smaller
|
||||||
// than a hash in order to be valid.
|
// than a hash in order to be valid.
|
||||||
if size := len(buf) - len(rest); size > hashLen {
|
if size := len(buf) - len(rest); size >= hashLen {
|
||||||
err := fmt.Errorf("oversized embedded Node (size is %d bytes, want size < %d)", size, hashLen)
|
err := fmt.Errorf("oversized embedded node (size is %d bytes, want size < %d)", size, hashLen)
|
||||||
return nil, buf, err
|
return nil, buf, err
|
||||||
}
|
}
|
||||||
n, err := decodeNode(nil, buf)
|
n, err := decodeNode(nil, buf)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue