From 56b7ba1ceedcc65866230687be448833ba5a6dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=B6kdemir?= Date: Sat, 26 Sep 2026 18:14:37 +0300 Subject: [PATCH] fix: clear pooled codec flags MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Efe Gökdemir --- decode.go | 1 + encode.go | 1 + pool_test.go | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/decode.go b/decode.go index 20494cc0..49e5b998 100644 --- a/decode.go +++ b/decode.go @@ -47,6 +47,7 @@ func PutDecoder(dec *Decoder) { dec.r = nil dec.s = nil dec.bsr.data = nil + dec.flags = 0 // Keep buf capacity for reuse, but drop oversized buffers to prevent // the pool from retaining memory from large decode operations. if poolBufOversized(cap(dec.buf)) { diff --git a/encode.go b/encode.go index 0e87555c..8d484ca5 100644 --- a/encode.go +++ b/encode.go @@ -54,6 +54,7 @@ func GetEncoder() *Encoder { func PutEncoder(enc *Encoder) { enc.w = nil + enc.flags = 0 // Keep wbuf capacity for reuse, but drop oversized buffers. if poolBufOversized(cap(enc.wbuf)) { enc.wbuf = nil diff --git a/pool_test.go b/pool_test.go index 802b2960..1aa12f3c 100644 --- a/pool_test.go +++ b/pool_test.go @@ -78,6 +78,28 @@ func TestPoolBufferLimitDecoder(t *testing.T) { PutDecoder(dec) } +func TestPutEncoderClearsFlags(t *testing.T) { + enc := GetEncoder() + enc.UseCompactInts(true) + enc.SetSortMapKeys(true) + PutEncoder(enc) + + if enc.flags != 0 { + t.Fatalf("encoder flags=%d after PutEncoder, want 0", enc.flags) + } +} + +func TestPutDecoderClearsFlags(t *testing.T) { + dec := GetDecoder() + dec.UseInternedStrings(true) + dec.DisallowUnknownFields(true) + PutDecoder(dec) + + if dec.flags != 0 { + t.Fatalf("decoder flags=%d after PutDecoder, want 0", dec.flags) + } +} + func TestSetPoolBufferLimitClamp(t *testing.T) { SetPoolBufferLimit(-1) if got := getPoolBufferLimit(); got != defaultPoolBufferLimit {