diff --git a/index/store/goleveldb/iterator.go b/index/store/goleveldb/iterator.go index f067aeb5..2bc7f90c 100644 --- a/index/store/goleveldb/iterator.go +++ b/index/store/goleveldb/iterator.go @@ -59,11 +59,17 @@ func (ldi *Iterator) Current() ([]byte, []byte, bool) { } func (ldi *Iterator) Key() []byte { - return ldi.iterator.Key() + k := ldi.iterator.Key() + rv := make([]byte, len(k)) + copy(rv, k) + return rv } func (ldi *Iterator) Value() []byte { - return ldi.iterator.Value() + v := ldi.iterator.Value() + rv := make([]byte, len(v)) + copy(rv, v) + return rv } func (ldi *Iterator) Valid() bool { diff --git a/index/store/goleveldb/store.go b/index/store/goleveldb/store.go index f4ee0952..f202045c 100644 --- a/index/store/goleveldb/store.go +++ b/index/store/goleveldb/store.go @@ -52,7 +52,9 @@ func (ldbs *Store) get(key []byte) ([]byte, error) { if err == leveldb.ErrNotFound { return nil, nil } - return b, err + rv := make([]byte, len(b)) + copy(rv, b) + return rv, err } func (ldbs *Store) getWithSnapshot(key []byte, snapshot *leveldb.Snapshot) ([]byte, error) { @@ -61,7 +63,9 @@ func (ldbs *Store) getWithSnapshot(key []byte, snapshot *leveldb.Snapshot) ([]by if err == leveldb.ErrNotFound { return nil, nil } - return b, err + rv := make([]byte, len(b)) + copy(rv, b) + return rv, err } func (ldbs *Store) set(key, val []byte) error {