From 73c5aba21fcca1bf1f78e94d88920fde6762be9e Mon Sep 17 00:00:00 2001
From: gary rong <garyrong0905@gmail.com>
Date: Fri, 11 Aug 2017 18:41:49 +0800
Subject: [PATCH] ethdb: return copied value from MemDatabase.Get (#14958)

---
 ethdb/database_test.go   | 15 +++++++++++++++
 ethdb/memory_database.go |  2 +-
 2 files changed, 16 insertions(+), 1 deletion(-)

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
@@ -94,6 +94,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 {
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")
 }
-- 
GitLab