Description
Certain invalid inputs to ReadUvarint
or ReadVarint
could cause those functions to read an unlimited number of bytes from the ByteReader
argument before returning an error. This could lead to processing more input than expected when the caller is reading directly from the network and depends on ReadUvarint
and ReadVarint
only consuming a small, bounded number of bytes, even from invalid inputs.
With the update, ReadUvarint
and ReadVarint
now always return after consuming a bounded number of bytes (specifically, MaxVarintLen64
, which is 10). The result being returned has not changed; the functions merely detect and return some errors without reading as much input.
Thanks to Diederik Loerakker, Jonny Rhea, Raúl Kripalani, and Preston Van Loon for reporting this issue.
This issue is CVE-2020-16845.