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 {