Added more checks to readVarint

This commit is contained in:
SChernykh
2025-06-23 07:47:43 +02:00
parent 1b863109f9
commit 10d583adb6
2 changed files with 13 additions and 0 deletions
+5
View File
@@ -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)) {
+8
View File
@@ -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)