From 80e887d7bfbbb76fa57322d6b1121f127f3275cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= Date: Mon, 8 Jun 2020 16:11:37 +0300 Subject: [PATCH] core/state: avoid escape analysis fault when accessing cached state --- core/state/state_object.go | 4 ++-- core/state/statedb.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/state/state_object.go b/core/state/state_object.go index b4bc4b4897..015a673781 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -213,14 +213,14 @@ func (s *stateObject) GetCommittedState(db Database, key common.Hash) common.Has if _, destructed := s.db.snapDestructs[s.addrHash]; destructed { return common.Hash{} } - enc, err = s.db.snap.Storage(s.addrHash, crypto.Keccak256Hash(key[:])) + enc, err = s.db.snap.Storage(s.addrHash, crypto.Keccak256Hash(key.Bytes())) } // If snapshot unavailable or reading from it failed, load from the database if s.db.snap == nil || err != nil { if metrics.EnabledExpensive { defer func(start time.Time) { s.db.StorageReads += time.Since(start) }(time.Now()) } - if enc, err = s.getTrie(db).TryGet(key[:]); err != nil { + if enc, err = s.getTrie(db).TryGet(key.Bytes()); err != nil { s.setError(err) return common.Hash{} } diff --git a/core/state/statedb.go b/core/state/statedb.go index 0cfb902b68..45cf1f7c42 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -513,7 +513,7 @@ func (s *StateDB) getDeletedStateObject(addr common.Address) *stateObject { defer func(start time.Time) { s.SnapshotAccountReads += time.Since(start) }(time.Now()) } var acc *snapshot.Account - if acc, err = s.snap.Account(crypto.Keccak256Hash(addr[:])); err == nil { + if acc, err = s.snap.Account(crypto.Keccak256Hash(addr.Bytes())); err == nil { if acc == nil { return nil } @@ -532,9 +532,9 @@ func (s *StateDB) getDeletedStateObject(addr common.Address) *stateObject { if metrics.EnabledExpensive { defer func(start time.Time) { s.AccountReads += time.Since(start) }(time.Now()) } - enc, err := s.trie.TryGet(addr[:]) + enc, err := s.trie.TryGet(addr.Bytes()) if err != nil { - s.setError(fmt.Errorf("getDeleteStateObject (%x) error: %v", addr[:], err)) + s.setError(fmt.Errorf("getDeleteStateObject (%x) error: %v", addr.Bytes(), err)) return nil } if len(enc) == 0 {