Merge pull request #1478 from nspcc-dev/neo3/get_storage_items_fix

core: copy storage item key in simple.GetStorageItems
This commit is contained in:
Roman Khimov 2020-10-10 13:02:42 +03:00 committed by GitHub
commit 737306aacf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 1 deletions

View file

@ -413,7 +413,10 @@ func (dao *Simple) GetStorageItemsWithPrefix(id int32, prefix []byte) (map[strin
}
// Cut prefix and hash.
siMap[string(k[len(lookupKey):])] = si
// Must copy here, #1468.
key := make([]byte, len(k[len(lookupKey):]))
copy(key, k[len(lookupKey):])
siMap[string(key)] = si
}
dao.Store.Seek(lookupKey, saveToMap)
if err != nil {

View file

@ -38,6 +38,8 @@ type (
Get([]byte) ([]byte, error)
Put(k, v []byte) error
PutBatch(Batch) error
// Seek can guarantee that provided key (k) and value (v) are the only valid until the next call to f.
// Key and value slices should not be modified.
Seek(k []byte, f func(k, v []byte))
Close() error
}