From 5f7b1f1b4f2ebe85c7a41b51ad1f030701c0bb66 Mon Sep 17 00:00:00 2001 From: Jonathan Moody <103143855+moodyjon@users.noreply.github.com> Date: Tue, 24 May 2022 09:17:45 -0400 Subject: [PATCH] Copy value received by MergeOlder/MergeNewer so caller can't trash the merge result by modifying the contents. --- claimtrie/node/noderepo/pebble.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/claimtrie/node/noderepo/pebble.go b/claimtrie/node/noderepo/pebble.go index e5ee75ed..32ca2c04 100644 --- a/claimtrie/node/noderepo/pebble.go +++ b/claimtrie/node/noderepo/pebble.go @@ -30,13 +30,17 @@ func (a *pooledMerger) Swap(i, j int) { } func (a *pooledMerger) MergeNewer(value []byte) error { - a.values = append(a.values, value) + vc := a.pool.Get().([]byte)[:0] + vc = append(vc, value...) + a.values = append(a.values, vc) a.index = append(a.index, len(a.values)) return nil } func (a *pooledMerger) MergeOlder(value []byte) error { - a.values = append(a.values, value) + vc := a.pool.Get().([]byte)[:0] + vc = append(vc, value...) + a.values = append(a.values, vc) a.index = append(a.index, -len(a.values)) return nil } @@ -53,6 +57,9 @@ func (a *pooledMerger) Finish(includesBase bool) ([]byte, io.Closer, error) { } func (a *pooledMerger) Close() error { + for i := range a.values { + a.pool.Put(a.values[i]) + } a.pool.Put(a.buffer) return nil }