Fix an issue where the ByteSource path (used for parsing std::string)

would incorrectly accept some invalid varints that the other path would not,
causing potential CHECK-failures if the unit test were run with
--write_uncompressed and a corrupted input file.

Found by the afl fuzzer.
This commit is contained in:
Steinar H. Gunderson
2016-01-04 12:52:15 +01:00
parent ef5598aa0e
commit 7525a1600d
3 changed files with 19 additions and 1 deletions

View File

@@ -545,7 +545,9 @@ class SnappyDecompressor {
if (n == 0) return false;
const unsigned char c = *(reinterpret_cast<const unsigned char*>(ip));
reader_->Skip(1);
*result |= static_cast<uint32>(c & 0x7f) << shift;
uint32 val = c & 0x7f;
if (((val << shift) >> shift) != val) return false;
*result |= val << shift;
if (c < 128) {
break;
}