aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgary rong <garyrong0905@gmail.com>2017-08-11 18:41:49 +0800
committerFelix Lange <fjl@users.noreply.github.com>2017-08-11 18:41:49 +0800
commit73c5aba21fcca1bf1f78e94d88920fde6762be9e (patch)
tree551324966298ee0462ff39b378925aea3597eccb
parent17ce0a37de5a2712a8bf9d58df705e718b3b2cd6 (diff)
downloadgo-tangerine-73c5aba21fcca1bf1f78e94d88920fde6762be9e.tar.gz
go-tangerine-73c5aba21fcca1bf1f78e94d88920fde6762be9e.tar.zst
go-tangerine-73c5aba21fcca1bf1f78e94d88920fde6762be9e.zip
ethdb: return copied value from MemDatabase.Get (#14958)
-rw-r--r--ethdb/database_test.go15
-rw-r--r--ethdb/memory_database.go2
2 files changed, 16 insertions, 1 deletions
diff --git a/ethdb/database_test.go b/ethdb/database_test.go
index 4740cdaed..5e4a3ca34 100644
--- a/ethdb/database_test.go
+++ b/ethdb/database_test.go
@@ -95,6 +95,21 @@ func testPutGet(db ethdb.Database, t *testing.T) {
}
for _, v := range test_values {
+ orig, err := db.Get([]byte(v))
+ if err != nil {
+ t.Fatalf("get failed: %v", err)
+ }
+ orig[0] = byte(0xff)
+ data, err := db.Get([]byte(v))
+ if err != nil {
+ t.Fatalf("get failed: %v", err)
+ }
+ if !bytes.Equal(data, []byte("?")) {
+ t.Fatalf("get returned wrong result, got %q expected ?", string(data))
+ }
+ }
+
+ for _, v := range test_values {
err := db.Delete([]byte(v))
if err != nil {
t.Fatalf("delete %q failed: %v", v, err)
diff --git a/ethdb/memory_database.go b/ethdb/memory_database.go
index a2ee2f2cc..11b093724 100644
--- a/ethdb/memory_database.go
+++ b/ethdb/memory_database.go
@@ -50,7 +50,7 @@ func (db *MemDatabase) Get(key []byte) ([]byte, error) {
defer db.lock.RUnlock()
if entry, ok := db.db[string(key)]; ok {
- return entry, nil
+ return common.CopyBytes(entry), nil
}
return nil, errors.New("not found")
}