msgpack icon indicating copy to clipboard operation
msgpack copied to clipboard

panic: reflect: reflect.Value.SetString using unaddressable value

Open TXYH1 opened this issue 2 years ago • 0 comments

This code will panic, And I found it is because of github.com/vmihailenco/msgpack/v5/decode_ value.go:130, Therefore, if I replace S1 with a null pointer, there will be no panic. Is this a bug

image
func TestMsgpack(t *testing.T) {
	type demo struct{}
	t1 := []interface{}{nil}
	data, _ := Marshal(t1)
	//var s1 *demo
	s1 := new(demo)
	us := []interface{}{s1}
	Unmarshal(data, &us)

}

func Marshal(v interface{}) ([]byte, error) {
	enc := msgpack.GetEncoder()
	defer msgpack.PutEncoder(enc)

	var buf bytes.Buffer
	enc.Reset(&buf)

	err := enc.Encode(v)
	if err != nil {
		return nil, err
	}
	return buf.Bytes(), err
}

func Unmarshal(data []byte, v interface{}) error {
	dec := msgpack.GetDecoder()
	defer msgpack.PutDecoder(dec)

	dec.Reset(bytes.NewReader(data))
	err := dec.Decode(v)

	return err
}

TXYH1 avatar Jul 28 '22 09:07 TXYH1