From e3ed19364616379fdf60432a025b0914cd193a73 Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Tue, 29 Apr 2014 06:54:01 -0600 Subject: Copy key on Put() and CreateBucket(). This commit makes a copy of the key byte slice before inserting into the database. This fixes the issue where users may reuse byte buffers which can corrupt the database. Fixes #143. --- bucket.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bucket.go b/bucket.go index 571cae4..9737128 100644 --- a/bucket.go +++ b/bucket.go @@ -154,6 +154,7 @@ func (b *Bucket) CreateBucket(key []byte) (*Bucket, error) { bucket.root = p.id // Insert into node. + key = cloneBytes(key) c.node().put(key, key, value, 0, bucketLeafFlag) return b.Bucket(key), nil @@ -262,6 +263,7 @@ func (b *Bucket) Put(key []byte, value []byte) error { } // Insert into node. + key = cloneBytes(key) c.node().put(key, key, value, 0, 0) return nil @@ -533,3 +535,10 @@ type BucketStats struct { LeafAlloc int // bytes allocated for physical leaf pages LeafInuse int // bytes actually used for leaf data } + +// cloneBytes returns a copy of a given slice. +func cloneBytes(v []byte) []byte { + var clone = make([]byte, len(v)) + copy(clone, v) + return clone +} -- cgit v1.2.3