mirror of https://github.com/status-im/op-geth.git
rlp: reject trailing data when using DecodeBytes
This commit is contained in:
parent
593b1b65e7
commit
cefd948267
|
@ -110,9 +110,17 @@ func Decode(r io.Reader, val interface{}) error {
|
||||||
|
|
||||||
// DecodeBytes parses RLP data from b into val.
|
// DecodeBytes parses RLP data from b into val.
|
||||||
// Please see the documentation of Decode for the decoding rules.
|
// Please see the documentation of Decode for the decoding rules.
|
||||||
|
// The input must contain exactly one value and no trailing data.
|
||||||
func DecodeBytes(b []byte, val interface{}) error {
|
func DecodeBytes(b []byte, val interface{}) error {
|
||||||
// TODO: this could use a Stream from a pool.
|
// TODO: this could use a Stream from a pool.
|
||||||
return NewStream(bytes.NewReader(b), uint64(len(b))).Decode(val)
|
r := bytes.NewReader(b)
|
||||||
|
if err := NewStream(r, uint64(len(b))).Decode(val); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if r.Len() > 0 {
|
||||||
|
return ErrMoreThanOneValue
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type decodeError struct {
|
type decodeError struct {
|
||||||
|
@ -517,6 +525,10 @@ var (
|
||||||
ErrElemTooLarge = errors.New("rlp: element is larger than containing list")
|
ErrElemTooLarge = errors.New("rlp: element is larger than containing list")
|
||||||
ErrValueTooLarge = errors.New("rlp: value size exceeds available input length")
|
ErrValueTooLarge = errors.New("rlp: value size exceeds available input length")
|
||||||
|
|
||||||
|
// This error is reported by DecodeBytes if the slice contains
|
||||||
|
// additional data after the first RLP value.
|
||||||
|
ErrMoreThanOneValue = errors.New("rlp: input contains more than one value")
|
||||||
|
|
||||||
// internal errors
|
// internal errors
|
||||||
errNotInList = errors.New("rlp: call of ListEnd outside of any list")
|
errNotInList = errors.New("rlp: call of ListEnd outside of any list")
|
||||||
errNotAtEOL = errors.New("rlp: call of ListEnd not positioned at EOL")
|
errNotAtEOL = errors.New("rlp: call of ListEnd not positioned at EOL")
|
||||||
|
|
Loading…
Reference in New Issue