rlp: fix check for canonical byte array size

Decoding did not reject byte arrays of length one with a single element
b where 55 < b < 128. Such byte arrays must be rejected because
they must be encoded as the single byte b instead.
This commit is contained in:
Felix Lange
2015-07-18 16:13:20 +02:00
committed by Jeffrey Wilcke
parent 7b99278eb0
commit d60b07249c
2 changed files with 16 additions and 9 deletions

View File

@ -361,7 +361,7 @@ func decodeByteArray(s *Stream, val reflect.Value) error {
return err
}
// Reject cases where single byte encoding should have been used.
if size == 1 && slice[0] < 56 {
if size == 1 && slice[0] < 128 {
return wrapStreamError(ErrCanonSize, val.Type())
}
case List:
@ -623,7 +623,7 @@ func (s *Stream) Bytes() ([]byte, error) {
if err = s.readFull(b); err != nil {
return nil, err
}
if size == 1 && b[0] < 56 {
if size == 1 && b[0] < 128 {
return nil, ErrCanonSize
}
return b, nil
@ -687,7 +687,7 @@ func (s *Stream) uint(maxbits int) (uint64, error) {
return 0, ErrCanonInt
case err != nil:
return 0, err
case size > 0 && v < 56:
case size > 0 && v < 128:
return 0, ErrCanonSize
default:
return v, nil