rlp: fix pointer reuse
This commit is contained in:
parent
74266d5bbd
commit
bd0a50fdc3
@ -309,6 +309,7 @@ func makePtrDecoder(typ reflect.Type) (decoder, error) {
|
|||||||
dec := func(s *Stream, val reflect.Value) (err error) {
|
dec := func(s *Stream, val reflect.Value) (err error) {
|
||||||
_, size, err := s.Kind()
|
_, size, err := s.Kind()
|
||||||
if err != nil || size == 0 && s.byteval == 0 {
|
if err != nil || size == 0 && s.byteval == 0 {
|
||||||
|
val.Set(reflect.Zero(typ)) // set to nil
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
newval := val
|
newval := val
|
||||||
|
@ -176,8 +176,6 @@ type recstruct struct {
|
|||||||
Child *recstruct
|
Child *recstruct
|
||||||
}
|
}
|
||||||
|
|
||||||
var sharedByteArray [5]byte
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
veryBigInt = big.NewInt(0).Add(
|
veryBigInt = big.NewInt(0).Add(
|
||||||
big.NewInt(0).Lsh(big.NewInt(0xFFFFFFFFFFFFFF), 16),
|
big.NewInt(0).Lsh(big.NewInt(0xFFFFFFFFFFFFFF), 16),
|
||||||
@ -185,6 +183,11 @@ var (
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
sharedByteArray [5]byte
|
||||||
|
sharedPtr = new(*int)
|
||||||
|
)
|
||||||
|
|
||||||
var decodeTests = []decodeTest{
|
var decodeTests = []decodeTest{
|
||||||
// integers
|
// integers
|
||||||
{input: "05", ptr: new(uint32), value: uint32(5)},
|
{input: "05", ptr: new(uint32), value: uint32(5)},
|
||||||
@ -268,6 +271,10 @@ var decodeTests = []decodeTest{
|
|||||||
{input: "C109", ptr: new(*[]int), value: &[]int{9}},
|
{input: "C109", ptr: new(*[]int), value: &[]int{9}},
|
||||||
{input: "C58403030303", ptr: new(*[][]byte), value: &[][]byte{{3, 3, 3, 3}}},
|
{input: "C58403030303", ptr: new(*[][]byte), value: &[][]byte{{3, 3, 3, 3}}},
|
||||||
|
|
||||||
|
// pointer should be reset to nil
|
||||||
|
{input: "05", ptr: sharedPtr, value: intp(5)},
|
||||||
|
{input: "80", ptr: sharedPtr, value: (*int)(nil)},
|
||||||
|
|
||||||
// interface{}
|
// interface{}
|
||||||
{input: "00", ptr: new(interface{}), value: []byte{0}},
|
{input: "00", ptr: new(interface{}), value: []byte{0}},
|
||||||
{input: "01", ptr: new(interface{}), value: []byte{1}},
|
{input: "01", ptr: new(interface{}), value: []byte{1}},
|
||||||
|
Loading…
Reference in New Issue
Block a user