Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

marshal []bytes panic #340

Open
qianxiansheng90 opened this issue Aug 2, 2022 · 2 comments
Open

marshal []bytes panic #340

qianxiansheng90 opened this issue Aug 2, 2022 · 2 comments

Comments

@qianxiansheng90
Copy link

qianxiansheng90 commented Aug 2, 2022

env:
go 1.8
ubuntu 20

code:

type Data struct {
	Key         []byte `json:"key"`
}

func (d *Data) MarshalBinary() ([]byte, error) {
	return msgpack.Marshal(d)
}

func (d *Data) UnmarshalBinary(data []byte) error {
	return msgpack.Unmarshal(data, d)
}
func main() {
	b, err := msgpack.Marshal(&Data{
		Key:         []byte("123"),
	})
	fmt.Println(string(b), err)
}

error:
runtime: goroutine stack exceeds 1000000000-byte limit
runtime: sp=0x40203c0390 stack=[0x40203c0000, 0x40403c0000]
fatal error: stack overflow

runtime stack:
runtime.throw({0x6c51bf?, 0xb7eb60?})
/usr/local/go/src/runtime/panic.go:992 +0x50
runtime.newstack()
/usr/local/go/src/runtime/stack.go:1101 +0x47c
runtime.morestack()
/usr/local/go/src/runtime/asm_arm64.s:310 +0x70

goroutine 1 [running]:
runtime.heapBitsSetType(0x400d5f8f00?, 0x60?, 0x60?, 0x6759c0?)
/usr/local/go/src/runtime/mbitmap.go:832 +0x998 fp=0x40203c0390 sp=0x40203c0390 pc=0x25a18
runtime.mallocgc(0x60, 0x6759c0, 0x1)
/usr/local/go/src/runtime/malloc.go:1117 +0x5f8 fp=0x40203c0400 sp=0x40203c0390 pc=0x1d358
runtime.newobject(0x40203c0478?)
/usr/local/go/src/runtime/malloc.go:1259 +0x30 fp=0x40203c0430 sp=0x40203c0400 pc=0x1d790
github.com/vmihailenco/msgpack/v5.NewEncoder(...)
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:91
github.com/vmihailenco/msgpack/v5.glob..func2()
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:46 +0x40 fp=0x40203c0490 sp=0x40203c0430 pc=0x3cc220
sync.(*Pool).Get(0xbac360)
/usr/local/go/src/sync/pool.go:148 +0xc0 fp=0x40203c04d0 sp=0x40203c0490 pc=0x7cb70
github.com/vmihailenco/msgpack/v5.GetEncoder(...)
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:51
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:61 +0x30 fp=0x40203c0560 sp=0x40203c04d0 pc=0x3cc390
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c0580 sp=0x40203c0560 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8ea0, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c05c0 sp=0x40203c0580 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c0648?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c0610 sp=0x40203c05c0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c0650 sp=0x40203c0610 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c06e0 sp=0x40203c0650 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c0700 sp=0x40203c06e0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8e40, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c0740 sp=0x40203c0700 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c07c8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c0790 sp=0x40203c0740 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c07d0 sp=0x40203c0790 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c0860 sp=0x40203c07d0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c0880 sp=0x40203c0860 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8de0, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c08c0 sp=0x40203c0880 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c0948?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c0910 sp=0x40203c08c0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c0950 sp=0x40203c0910 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c09e0 sp=0x40203c0950 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c0a00 sp=0x40203c09e0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8d80, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c0a40 sp=0x40203c0a00 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c0ac8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c0a90 sp=0x40203c0a40 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c0ad0 sp=0x40203c0a90 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c0b60 sp=0x40203c0ad0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c0b80 sp=0x40203c0b60 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8d20, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c0bc0 sp=0x40203c0b80 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c0c48?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c0c10 sp=0x40203c0bc0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c0c50 sp=0x40203c0c10 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c0ce0 sp=0x40203c0c50 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c0d00 sp=0x40203c0ce0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8cc0, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c0d40 sp=0x40203c0d00 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c0dc8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c0d90 sp=0x40203c0d40 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c0dd0 sp=0x40203c0d90 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c0e60 sp=0x40203c0dd0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c0e80 sp=0x40203c0e60 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8c60, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c0ec0 sp=0x40203c0e80 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c0f48?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c0f10 sp=0x40203c0ec0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c0f50 sp=0x40203c0f10 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c0fe0 sp=0x40203c0f50 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1000 sp=0x40203c0fe0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8c00, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c1040 sp=0x40203c1000 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c10c8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1090 sp=0x40203c1040 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c10d0 sp=0x40203c1090 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c1160 sp=0x40203c10d0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1180 sp=0x40203c1160 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8ba0, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c11c0 sp=0x40203c1180 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c1248?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1210 sp=0x40203c11c0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c1250 sp=0x40203c1210 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c12e0 sp=0x40203c1250 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1300 sp=0x40203c12e0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8b40, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c1340 sp=0x40203c1300 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c13c8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1390 sp=0x40203c1340 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c13d0 sp=0x40203c1390 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c1460 sp=0x40203c13d0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1480 sp=0x40203c1460 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8ae0, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c14c0 sp=0x40203c1480 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c1548?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1510 sp=0x40203c14c0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c1550 sp=0x40203c1510 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c15e0 sp=0x40203c1550 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1600 sp=0x40203c15e0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8a80, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c1640 sp=0x40203c1600 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c16c8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1690 sp=0x40203c1640 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c16d0 sp=0x40203c1690 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c1760 sp=0x40203c16d0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1780 sp=0x40203c1760 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8a20, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c17c0 sp=0x40203c1780 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c1848?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1810 sp=0x40203c17c0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c1850 sp=0x40203c1810 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c18e0 sp=0x40203c1850 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1900 sp=0x40203c18e0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f89c0, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c1940 sp=0x40203c1900 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c19c8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1990 sp=0x40203c1940 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c19d0 sp=0x40203c1990 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c1a60 sp=0x40203c19d0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1a80 sp=0x40203c1a60 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8960, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c1ac0 sp=0x40203c1a80 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c1b48?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1b10 sp=0x40203c1ac0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c1b50 sp=0x40203c1b10 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c1be0 sp=0x40203c1b50 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1c00 sp=0x40203c1be0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8900, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c1c40 sp=0x40203c1c00 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c1cc8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1c90 sp=0x40203c1c40 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c1cd0 sp=0x40203c1c90 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c1d60 sp=0x40203c1cd0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1d80 sp=0x40203c1d60 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f88a0, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c1dc0 sp=0x40203c1d80 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c1e48?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1e10 sp=0x40203c1dc0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c1e50 sp=0x40203c1e10 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c1ee0 sp=0x40203c1e50 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c1f00 sp=0x40203c1ee0 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f8840, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c1f40 sp=0x40203c1f00 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c1fc8?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c1f90 sp=0x40203c1f40 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c1fd0 sp=0x40203c1f90 pc=0x3cceb0
github.com/vmihailenco/msgpack/v5.Marshal({0x61d460, 0x4000070900})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:66 +0x15c fp=0x40203c2060 sp=0x40203c1fd0 pc=0x3cc4bc
main.(*Data).MarshalBinary(0x61d460?)
/media/psf/code/dubai_common/test2.go:56 +0x2c fp=0x40203c2080 sp=0x40203c2060 pc=0x59abcc
github.com/vmihailenco/msgpack/v5.marshalBinaryValue(0x400d5f87e0, {0x61d460?, 0x4000070900?, 0xffff426ccb58?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode_value.go:216 +0x104 fp=0x40203c20c0 sp=0x40203c2080 pc=0x3d1da4
github.com/vmihailenco/msgpack/v5.(*Encoder).EncodeValue(0x40203c2148?, {0x61d460?, 0x4000070900?, 0x694680?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:239 +0x68 fp=0x40203c2110 sp=0x40203c20c0 pc=0x3cd038
github.com/vmihailenco/msgpack/v5.(*Encoder).Encode(0xbac360?, {0x61d460?, 0x4000070900?})
/home/qfy/go/pkg/mod/github.com/vmihailenco/msgpack/v5@v5.3.5/encode.go:225 +0x370 fp=0x40203c2150 sp=0x40203c2110 pc=0x3cceb0
exit status 2

@fun-li
Copy link

fun-li commented Aug 6, 2022

I found that if your structure implements the encoding.BinaryMarshaler interface, the msgpack.Marshal(v) method will call the method you implemented, resulting in a recursive call.You can find the relevant logic in line 216 of this file

@phlashdev
Copy link

I found that if your structure implements the encoding.BinaryMarshaler interface, the msgpack.Marshal(v) method will call the method you implemented, resulting in a recursive call.You can find the relevant logic in line 216 of this file

Correct. This can in fact happen with many other encodings (possibly all binary encodings), like encoding/gob for example. The encoding.BinaryMarshaler interface is widely used to customize the way your type will be encoded.

I encountered the same behavior trying to save structs in redis using go-redis. My solution was to encode or decode the data manually directly before use which is very easy with the help of msgpack.Marshal(v) and msgpack.Unmarshal(v).

Another possible solution could be implemented by using a generic wrapper type.

type MsgpackWrapper[T any] struct {
	wrapped T
}

func (w *MsgpackWrapper[T]) MarshalBinary() (data []byte, err error) {
	return msgpack.Marshal(w.wrapped)
}

func (w *MsgpackWrapper[T]) UnmarshalBinary(data []byte) error {
	return msgpack.Unmarshal(data, &w.wrapped)
}

type Data struct {
	Key []byte `msgpack:"key"`
}

func main() {
	b, err := msgpack.Marshal(&MsgpackWrapper[Data]{
		wrapped: Data{
			Key: []byte("123"),
		},
	})
	fmt.Println(string(b), err)
}

@qianxiansheng90 is this a solution which would be helpful to you? Or have you found some other solution? If it is fine by you, maybe we can close the issue by now.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants