Skip to content

Commit a9af3d3

Browse files
committed
codec: fix passing checkExt appropriately when encoding/decoding an extension
If encoding or decoding an extension, checkExt must be false once EncodeExt or DecodeExt is called, else we can fall into an infinite loop or bypass encoding/decoding appropriately. Fixes #426
1 parent c135357 commit a9af3d3

11 files changed

Lines changed: 94 additions & 74 deletions

codec/binc.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ func (e *bincEncDriver[T]) EncodeExt(v interface{}, basetype reflect.Type, xtag
150150
if ext == SelfExt {
151151
bs0 = e.e.blist.get(1024)
152152
bs = bs0
153-
sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) })
153+
sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, false) })
154154
} else {
155155
bs = ext.WriteExt(v)
156156
}
@@ -751,7 +751,7 @@ func (d *bincDecDriver[T]) DecodeExt(rv interface{}, basetype reflect.Type, xtag
751751
return
752752
}
753753
if ext == SelfExt {
754-
sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) })
754+
sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, false) })
755755
} else {
756756
ext.ReadExt(rv, xbs)
757757
}

codec/binc.mono.generated.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,11 +1137,11 @@ func (e *encoderBincBytes) rawBytes(vv Raw) {
11371137
}
11381138

11391139
func (e *encoderBincBytes) fn(t reflect.Type) *encFnBincBytes {
1140-
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false)
1140+
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, true)
11411141
}
11421142

11431143
func (e *encoderBincBytes) fnNoExt(t reflect.Type) *encFnBincBytes {
1144-
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true)
1144+
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, false)
11451145
}
11461146

11471147
func (e *encoderBincBytes) mapStart(length int) {
@@ -1615,7 +1615,7 @@ func (d *decoderBincBytes) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) {
16151615
} else {
16161616
rvn = reflect.New(bfn.rt)
16171617
if bfn.ext == SelfExt {
1618-
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) })
1618+
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, false) })
16191619
} else {
16201620
bfn.ext.ReadExt(rv2i(rvn), bytes)
16211621
}
@@ -2841,16 +2841,17 @@ func (d *decoderBincBytes) interfaceExtConvertAndDecode(v interface{}, ext Inter
28412841

28422842
var vv interface{}
28432843
d.decode(&vv)
2844+
28442845
ext.UpdateExt(v, vv)
28452846

28462847
}
28472848

28482849
func (d *decoderBincBytes) fn(t reflect.Type) *decFnBincBytes {
2849-
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false)
2850+
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, true)
28502851
}
28512852

28522853
func (d *decoderBincBytes) fnNoExt(t reflect.Type) *decFnBincBytes {
2853-
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true)
2854+
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, false)
28542855
}
28552856

28562857
func (helperDecDriverBincBytes) newDecoderBytes(in []byte, h Handle) *decoderBincBytes {
@@ -3225,7 +3226,7 @@ func (e *bincEncDriverBytes) EncodeExt(v interface{}, basetype reflect.Type, xta
32253226
if ext == SelfExt {
32263227
bs0 = e.e.blist.get(1024)
32273228
bs = bs0
3228-
sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) })
3229+
sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, false) })
32293230
} else {
32303231
bs = ext.WriteExt(v)
32313232
}
@@ -3796,7 +3797,7 @@ func (d *bincDecDriverBytes) DecodeExt(rv interface{}, basetype reflect.Type, xt
37963797
return
37973798
}
37983799
if ext == SelfExt {
3799-
sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) })
3800+
sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, false) })
38003801
} else {
38013802
ext.ReadExt(rv, xbs)
38023803
}
@@ -5206,11 +5207,11 @@ func (e *encoderBincIO) rawBytes(vv Raw) {
52065207
}
52075208

52085209
func (e *encoderBincIO) fn(t reflect.Type) *encFnBincIO {
5209-
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false)
5210+
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, true)
52105211
}
52115212

52125213
func (e *encoderBincIO) fnNoExt(t reflect.Type) *encFnBincIO {
5213-
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true)
5214+
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, false)
52145215
}
52155216

52165217
func (e *encoderBincIO) mapStart(length int) {
@@ -5684,7 +5685,7 @@ func (d *decoderBincIO) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) {
56845685
} else {
56855686
rvn = reflect.New(bfn.rt)
56865687
if bfn.ext == SelfExt {
5687-
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) })
5688+
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, false) })
56885689
} else {
56895690
bfn.ext.ReadExt(rv2i(rvn), bytes)
56905691
}
@@ -6910,16 +6911,17 @@ func (d *decoderBincIO) interfaceExtConvertAndDecode(v interface{}, ext Interfac
69106911

69116912
var vv interface{}
69126913
d.decode(&vv)
6914+
69136915
ext.UpdateExt(v, vv)
69146916

69156917
}
69166918

69176919
func (d *decoderBincIO) fn(t reflect.Type) *decFnBincIO {
6918-
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false)
6920+
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, true)
69196921
}
69206922

69216923
func (d *decoderBincIO) fnNoExt(t reflect.Type) *decFnBincIO {
6922-
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true)
6924+
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, false)
69236925
}
69246926

69256927
func (helperDecDriverBincIO) newDecoderBytes(in []byte, h Handle) *decoderBincIO {
@@ -7294,7 +7296,7 @@ func (e *bincEncDriverIO) EncodeExt(v interface{}, basetype reflect.Type, xtag u
72947296
if ext == SelfExt {
72957297
bs0 = e.e.blist.get(1024)
72967298
bs = bs0
7297-
sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) })
7299+
sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, false) })
72987300
} else {
72997301
bs = ext.WriteExt(v)
73007302
}
@@ -7865,7 +7867,7 @@ func (d *bincDecDriverIO) DecodeExt(rv interface{}, basetype reflect.Type, xtag
78657867
return
78667868
}
78677869
if ext == SelfExt {
7868-
sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) })
7870+
sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, false) })
78697871
} else {
78707872
ext.ReadExt(rv, xbs)
78717873
}

codec/cbor.mono.generated.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,11 +1139,11 @@ func (e *encoderCborBytes) rawBytes(vv Raw) {
11391139
}
11401140

11411141
func (e *encoderCborBytes) fn(t reflect.Type) *encFnCborBytes {
1142-
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false)
1142+
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, true)
11431143
}
11441144

11451145
func (e *encoderCborBytes) fnNoExt(t reflect.Type) *encFnCborBytes {
1146-
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true)
1146+
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, false)
11471147
}
11481148

11491149
func (e *encoderCborBytes) mapStart(length int) {
@@ -1617,7 +1617,7 @@ func (d *decoderCborBytes) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) {
16171617
} else {
16181618
rvn = reflect.New(bfn.rt)
16191619
if bfn.ext == SelfExt {
1620-
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) })
1620+
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, false) })
16211621
} else {
16221622
bfn.ext.ReadExt(rv2i(rvn), bytes)
16231623
}
@@ -2843,16 +2843,17 @@ func (d *decoderCborBytes) interfaceExtConvertAndDecode(v interface{}, ext Inter
28432843

28442844
var vv interface{}
28452845
d.decode(&vv)
2846+
28462847
ext.UpdateExt(v, vv)
28472848

28482849
}
28492850

28502851
func (d *decoderCborBytes) fn(t reflect.Type) *decFnCborBytes {
2851-
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false)
2852+
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, true)
28522853
}
28532854

28542855
func (d *decoderCborBytes) fnNoExt(t reflect.Type) *decFnCborBytes {
2855-
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true)
2856+
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, false)
28562857
}
28572858

28582859
func (helperDecDriverCborBytes) newDecoderBytes(in []byte, h Handle) *decoderCborBytes {
@@ -5121,11 +5122,11 @@ func (e *encoderCborIO) rawBytes(vv Raw) {
51215122
}
51225123

51235124
func (e *encoderCborIO) fn(t reflect.Type) *encFnCborIO {
5124-
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false)
5125+
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, true)
51255126
}
51265127

51275128
func (e *encoderCborIO) fnNoExt(t reflect.Type) *encFnCborIO {
5128-
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true)
5129+
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, false)
51295130
}
51305131

51315132
func (e *encoderCborIO) mapStart(length int) {
@@ -5599,7 +5600,7 @@ func (d *decoderCborIO) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) {
55995600
} else {
56005601
rvn = reflect.New(bfn.rt)
56015602
if bfn.ext == SelfExt {
5602-
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) })
5603+
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, false) })
56035604
} else {
56045605
bfn.ext.ReadExt(rv2i(rvn), bytes)
56055606
}
@@ -6825,16 +6826,17 @@ func (d *decoderCborIO) interfaceExtConvertAndDecode(v interface{}, ext Interfac
68256826

68266827
var vv interface{}
68276828
d.decode(&vv)
6829+
68286830
ext.UpdateExt(v, vv)
68296831

68306832
}
68316833

68326834
func (d *decoderCborIO) fn(t reflect.Type) *decFnCborIO {
6833-
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false)
6835+
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, true)
68346836
}
68356837

68366838
func (d *decoderCborIO) fnNoExt(t reflect.Type) *decFnCborIO {
6837-
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true)
6839+
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, false)
68386840
}
68396841

68406842
func (helperDecDriverCborIO) newDecoderBytes(in []byte, h Handle) *decoderCborIO {

codec/codec_run_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3971,7 +3971,17 @@ func testUpdateExts(nhs ...testNameBasicHandle) {
39713971
sx(testSelfExtTyp, 78, SelfExt)
39723972
sx(testSelfExt2Typ, 79, SelfExt)
39733973
sx(wrapBytesTyp, 32, &tBytesExt)
3974-
sx(testUintToBytesTyp, 33, &tUintToBytesExt)
3974+
3975+
// binc, cbor and json are not good fits for this generalized extension.
3976+
// this is because
3977+
// - json: will base64 encode a byte into a string, but we don't know the bytesFmt used
3978+
// - ...
3979+
switch nh.n {
3980+
case "binc", "cbor", "json":
3981+
default:
3982+
sx(testUintToBytesTyp, 33, &tUintToBytesExt)
3983+
}
3984+
39753985
// Now, add extensions for the type wrapInt64 and wrapBytes,
39763986
// so we can execute the Encode/Decode Ext paths.
39773987
if nh.n == "simple" {

codec/decode.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func (d *decoder[T]) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) {
255255
} else {
256256
rvn = reflect.New(bfn.rt)
257257
if bfn.ext == SelfExt {
258-
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) })
258+
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, false) })
259259
} else {
260260
bfn.ext.ReadExt(rv2i(rvn), bytes)
261261
}
@@ -1696,11 +1696,11 @@ func (d *decoder[T]) interfaceExtConvertAndDecode(v interface{}, ext InterfaceEx
16961696
}
16971697

16981698
func (d *decoder[T]) fn(t reflect.Type) *decFn[T] {
1699-
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false)
1699+
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, true)
17001700
}
17011701

17021702
func (d *decoder[T]) fnNoExt(t reflect.Type) *decFn[T] {
1703-
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true)
1703+
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, false)
17041704
}
17051705

17061706
// ----

codec/encode.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,11 +1296,11 @@ func (e *encoder[T]) rawBytes(vv Raw) {
12961296
}
12971297

12981298
func (e *encoder[T]) fn(t reflect.Type) *encFn[T] {
1299-
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false)
1299+
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, true)
13001300
}
13011301

13021302
func (e *encoder[T]) fnNoExt(t reflect.Type) *encFn[T] {
1303-
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true)
1303+
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, false)
13041304
}
13051305

13061306
// ---- container tracker methods

codec/json.mono.generated.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1165,11 +1165,11 @@ func (e *encoderJsonBytes) rawBytes(vv Raw) {
11651165
}
11661166

11671167
func (e *encoderJsonBytes) fn(t reflect.Type) *encFnJsonBytes {
1168-
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false)
1168+
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, true)
11691169
}
11701170

11711171
func (e *encoderJsonBytes) fnNoExt(t reflect.Type) *encFnJsonBytes {
1172-
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true)
1172+
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, false)
11731173
}
11741174

11751175
func (e *encoderJsonBytes) mapStart(length int) {
@@ -1643,7 +1643,7 @@ func (d *decoderJsonBytes) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) {
16431643
} else {
16441644
rvn = reflect.New(bfn.rt)
16451645
if bfn.ext == SelfExt {
1646-
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) })
1646+
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, false) })
16471647
} else {
16481648
bfn.ext.ReadExt(rv2i(rvn), bytes)
16491649
}
@@ -2869,16 +2869,17 @@ func (d *decoderJsonBytes) interfaceExtConvertAndDecode(v interface{}, ext Inter
28692869

28702870
var vv interface{}
28712871
d.decode(&vv)
2872+
28722873
ext.UpdateExt(v, vv)
28732874

28742875
}
28752876

28762877
func (d *decoderJsonBytes) fn(t reflect.Type) *decFnJsonBytes {
2877-
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false)
2878+
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, true)
28782879
}
28792880

28802881
func (d *decoderJsonBytes) fnNoExt(t reflect.Type) *decFnJsonBytes {
2881-
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true)
2882+
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, false)
28822883
}
28832884

28842885
func (helperDecDriverJsonBytes) newDecoderBytes(in []byte, h Handle) *decoderJsonBytes {
@@ -5323,11 +5324,11 @@ func (e *encoderJsonIO) rawBytes(vv Raw) {
53235324
}
53245325

53255326
func (e *encoderJsonIO) fn(t reflect.Type) *encFnJsonIO {
5326-
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, false)
5327+
return e.dh.encFnViaBH(t, e.rtidFn, e.h, e.fp, true)
53275328
}
53285329

53295330
func (e *encoderJsonIO) fnNoExt(t reflect.Type) *encFnJsonIO {
5330-
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, true)
5331+
return e.dh.encFnViaBH(t, e.rtidFnNoExt, e.h, e.fp, false)
53315332
}
53325333

53335334
func (e *encoderJsonIO) mapStart(length int) {
@@ -5801,7 +5802,7 @@ func (d *decoderJsonIO) kInterfaceNaked(f *decFnInfo) (rvn reflect.Value) {
58015802
} else {
58025803
rvn = reflect.New(bfn.rt)
58035804
if bfn.ext == SelfExt {
5804-
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, true) })
5805+
sideDecode(d.hh, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv2i(rvn), bytes, bfn.rt, false) })
58055806
} else {
58065807
bfn.ext.ReadExt(rv2i(rvn), bytes)
58075808
}
@@ -7027,16 +7028,17 @@ func (d *decoderJsonIO) interfaceExtConvertAndDecode(v interface{}, ext Interfac
70277028

70287029
var vv interface{}
70297030
d.decode(&vv)
7031+
70307032
ext.UpdateExt(v, vv)
70317033

70327034
}
70337035

70347036
func (d *decoderJsonIO) fn(t reflect.Type) *decFnJsonIO {
7035-
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, false)
7037+
return d.dh.decFnViaBH(t, d.rtidFn, d.h, d.fp, true)
70367038
}
70377039

70387040
func (d *decoderJsonIO) fnNoExt(t reflect.Type) *decFnJsonIO {
7039-
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, true)
7041+
return d.dh.decFnViaBH(t, d.rtidFnNoExt, d.h, d.fp, false)
70407042
}
70417043

70427044
func (helperDecDriverJsonIO) newDecoderBytes(in []byte, h Handle) *decoderJsonIO {

codec/msgpack.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func (e *msgpackEncDriver[T]) EncodeExt(v interface{}, basetype reflect.Type, xt
157157
if ext == SelfExt {
158158
bs0 = e.e.blist.get(1024)
159159
bs = bs0
160-
sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, true) })
160+
sideEncode(e.h, &e.h.sideEncPool, func(se encoderI) { oneOffEncode(se, v, &bs, basetype, false) })
161161
} else {
162162
bs = ext.WriteExt(v)
163163
}
@@ -900,7 +900,7 @@ func (d *msgpackDecDriver[T]) DecodeExt(rv interface{}, basetype reflect.Type, x
900900
return
901901
}
902902
if ext == SelfExt {
903-
sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, true) })
903+
sideDecode(d.h, &d.h.sideDecPool, func(sd decoderI) { oneOffDecode(sd, rv, xbs, basetype, false) })
904904
} else {
905905
ext.ReadExt(rv, xbs)
906906
}

0 commit comments

Comments
 (0)