p2p/enr: fix decoding of incomplete lists (#22484)

Given a list of less than two elements DecodeRLP returned rlp.EOL,
leading to issues in outer decoders.
This commit is contained in:
Felix Lange
2021-03-11 15:09:25 +01:00
committed by GitHub
parent 22082f9e56
commit aae7660410
2 changed files with 30 additions and 0 deletions

View File

@ -50,6 +50,7 @@ var (
errNotSorted = errors.New("record key/value pairs are not sorted by key")
errDuplicateKey = errors.New("record contains duplicate key")
errIncompletePair = errors.New("record contains incomplete k/v pair")
errIncompleteList = errors.New("record contains less than two list elements")
errTooBig = fmt.Errorf("record bigger than %d bytes", SizeLimit)
errEncodeUnsigned = errors.New("can't encode unsigned record")
errNotFound = errors.New("no such key in record")
@ -209,9 +210,15 @@ func decodeRecord(s *rlp.Stream) (dec Record, raw []byte, err error) {
return dec, raw, err
}
if err = s.Decode(&dec.signature); err != nil {
if err == rlp.EOL {
err = errIncompleteList
}
return dec, raw, err
}
if err = s.Decode(&dec.seq); err != nil {
if err == rlp.EOL {
err = errIncompleteList
}
return dec, raw, err
}
// The rest of the record contains sorted k/v pairs.