Merge pull request #21003 from karalabe/snapshot-journal-nilfix

core/state/snapshot: fix journal nil deserialziation
This commit is contained in:
Péter Szilágyi 2020-04-30 10:26:25 +03:00 committed by GitHub
commit 3cebfb6664
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -158,7 +158,11 @@ func loadDiffLayer(parent snapshot, r *rlp.Stream) (snapshot, error) {
} }
accountData := make(map[common.Hash][]byte) accountData := make(map[common.Hash][]byte)
for _, entry := range accounts { for _, entry := range accounts {
accountData[entry.Hash] = entry.Blob if len(entry.Blob) > 0 { // RLP loses nil-ness, but `[]byte{}` is not a valid item, so reinterpret that
accountData[entry.Hash] = entry.Blob
} else {
accountData[entry.Hash] = nil
}
} }
var storage []journalStorage var storage []journalStorage
if err := r.Decode(&storage); err != nil { if err := r.Decode(&storage); err != nil {
@ -168,7 +172,11 @@ func loadDiffLayer(parent snapshot, r *rlp.Stream) (snapshot, error) {
for _, entry := range storage { for _, entry := range storage {
slots := make(map[common.Hash][]byte) slots := make(map[common.Hash][]byte)
for i, key := range entry.Keys { for i, key := range entry.Keys {
slots[key] = entry.Vals[i] if len(entry.Vals[i]) > 0 { // RLP loses nil-ness, but `[]byte{}` is not a valid item, so reinterpret that
slots[key] = entry.Vals[i]
} else {
slots[key] = nil
}
} }
storageData[entry.Hash] = slots storageData[entry.Hash] = slots
} }