diff --git a/bucket.go b/bucket.go index 6a3c48ae8..c8684c8fc 100644 --- a/bucket.go +++ b/bucket.go @@ -175,15 +175,17 @@ func (b *Bucket) CreateBucket(key []byte) (*Bucket, error) { var value = bucket.write() // Insert into node. - key = cloneBytes(key) - c.node().put(key, key, value, 0, common.BucketLeafFlag) + // Using new variable here is important: otherwise `key` param + // is marked as leaking and cannot be allocated on stack. + newKey := cloneBytes(key) + c.node().put(newKey, newKey, value, 0, common.BucketLeafFlag) // Since subbuckets are not allowed on inline buckets, we need to // dereference the inline page, if it exists. This will cause the bucket // to be treated as a regular, non-inline bucket for the rest of the tx. b.page = nil - return b.Bucket(key), nil + return b.Bucket(newKey), nil } // CreateBucketIfNotExists creates a new bucket if it doesn't already exist and returns a reference to it. @@ -291,8 +293,10 @@ func (b *Bucket) Put(key []byte, value []byte) error { } // Insert into node. - key = cloneBytes(key) - c.node().put(key, key, value, 0, 0) + // Using new variable here is important: otherwise `key` param + // is marked as leaking and cannot be allocated on stack. + newKey := cloneBytes(key) + c.node().put(newKey, newKey, value, 0, 0) return nil }