diff --git a/trie/encoding.go b/trie/encoding.go index 5f120de638ce..1955a3e664f5 100644 --- a/trie/encoding.go +++ b/trie/encoding.go @@ -52,6 +52,9 @@ func hexToCompact(hex []byte) []byte { } func compactToHex(compact []byte) []byte { + if len(compact) == 0 { + return compact + } base := keybytesToHex(compact) // delete terminator flag if base[0] < 2 { diff --git a/trie/trie_test.go b/trie/trie_test.go index f9d6029c997a..4d84aa96cf45 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -614,3 +614,16 @@ func updateString(trie *Trie, k, v string) { func deleteString(trie *Trie, k string) { trie.Delete([]byte(k)) } + +func TestDecodeNode(t *testing.T) { + t.Parallel() + var ( + hash = make([]byte, 20) + elems = make([]byte, 20) + ) + for i := 0; i < 5000000; i++ { + rand.Read(hash) + rand.Read(elems) + decodeNode(hash, elems, 1) + } +}