diff --git a/rlp/decode.go b/rlp/decode.go index 9b17d2d810..c9b50e8c18 100644 --- a/rlp/decode.go +++ b/rlp/decode.go @@ -90,7 +90,7 @@ func Decode(r io.Reader, val interface{}) error { // DecodeBytes parses RLP data from b into val. Please see package-level documentation for // the decoding rules. The input must contain exactly one value and no trailing data. func DecodeBytes(b []byte, val interface{}) error { - r := (*sliceReader)(&b) + r := bytes.NewReader(b) stream := streamPool.Get().(*Stream) defer streamPool.Put(stream) @@ -99,7 +99,7 @@ func DecodeBytes(b []byte, val interface{}) error { if err := stream.Decode(val); err != nil { return err } - if len(b) > 0 { + if r.Len() > 0 { return ErrMoreThanOneValue } return nil @@ -1182,23 +1182,3 @@ func (s *Stream) listLimit() (inList bool, limit uint64) { } return true, s.stack[len(s.stack)-1] } - -type sliceReader []byte - -func (sr *sliceReader) Read(b []byte) (int, error) { - if len(*sr) == 0 { - return 0, io.EOF - } - n := copy(b, *sr) - *sr = (*sr)[n:] - return n, nil -} - -func (sr *sliceReader) ReadByte() (byte, error) { - if len(*sr) == 0 { - return 0, io.EOF - } - b := (*sr)[0] - *sr = (*sr)[1:] - return b, nil -}