From ac0d154870bec804ed4036052a14089ed773cd94 Mon Sep 17 00:00:00 2001 From: Weixie Cui Date: Mon, 11 May 2026 20:24:07 +0800 Subject: [PATCH] trie/bintrie: fix panics for small chunk numbers --- trie/bintrie/key_encoding.go | 4 ++-- trie/bintrie/key_encoding_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 trie/bintrie/key_encoding_test.go diff --git a/trie/bintrie/key_encoding.go b/trie/bintrie/key_encoding.go index 265935293b..de86e6d552 100644 --- a/trie/bintrie/key_encoding.go +++ b/trie/bintrie/key_encoding.go @@ -105,8 +105,8 @@ func GetBinaryTreeKeyStorageSlot(address common.Address, slotnum []byte) []byte } func GetBinaryTreeKeyCodeChunk(address common.Address, chunknr *uint256.Int) []byte { - chunkOffset := new(uint256.Int).Add(codeOffset, chunknr).Bytes() - return GetBinaryTreeKey(address, chunkOffset) + chunkOffset := new(uint256.Int).Add(codeOffset, chunknr).Bytes32() + return GetBinaryTreeKey(address, chunkOffset[:]) } func StorageIndex(storageKey []byte) (*uint256.Int, byte) { diff --git a/trie/bintrie/key_encoding_test.go b/trie/bintrie/key_encoding_test.go new file mode 100644 index 0000000000..cbb59d87ac --- /dev/null +++ b/trie/bintrie/key_encoding_test.go @@ -0,0 +1,28 @@ +// Copyright 2025 go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bintrie + +import ( + "github.com/ethereum/go-ethereum/common" + "github.com/holiman/uint256" + "testing" +) + +func TestGetBinaryTreeKeyCodeChunkPanic(t *testing.T) { + addr := common.HexToAddress("0x1234567890123456789012345678901234567890") + GetBinaryTreeKeyCodeChunk(addr, uint256.NewInt(0)) +}