Added more checks to readVarint
This commit is contained in:
@@ -186,6 +186,11 @@ const uint8_t* readVarint(const uint8_t* data, const uint8_t* data_end, T& b)
|
||||
}
|
||||
|
||||
const uint64_t cur_byte = *(data++);
|
||||
|
||||
if (k && (cur_byte == 0)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
result |= (cur_byte & 0x7F) << k;
|
||||
|
||||
if ((k > 0) && (shiftleft128(cur_byte & 0x7F, 0, k) != 0)) {
|
||||
|
||||
@@ -90,6 +90,14 @@ TEST(util, varint)
|
||||
uint32_t check2;
|
||||
uint8_t buf4[] = {255, 255, 255, 255, 127};
|
||||
ASSERT_EQ(readVarint(buf4, buf4 + sizeof(buf4), check2), nullptr);
|
||||
|
||||
// Invalid value 5
|
||||
uint8_t buf5[] = {128, 0};
|
||||
ASSERT_EQ(readVarint(buf5, buf5 + sizeof(buf5), check), nullptr);
|
||||
|
||||
// Invalid value 6 (2^64)
|
||||
uint8_t buf6[] = {128, 128, 128, 128, 128, 128, 128, 128, 128, 2};
|
||||
ASSERT_EQ(readVarint(buf6, buf6 + sizeof(buf6), check), nullptr);
|
||||
}
|
||||
|
||||
TEST(util, bsr)
|
||||
|
||||
Reference in New Issue
Block a user