[PATCH] D91405: [clangd] Assert on varint encoding
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 13 01:14:19 PST 2020
kadircet created this revision.
kadircet added a reviewer: sammccall.
Herald added subscribers: cfe-commits, usaxena95, arphaman.
Herald added a project: clang.
kadircet requested review of this revision.
Herald added subscribers: MaskRay, ilya-biryukov.
5th byte of a varint can't be bigger than 0x0f, fix a test and add an
assertion.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D91405
Files:
clang-tools-extra/clangd/index/Serialization.cpp
clang-tools-extra/clangd/unittests/SerializationTests.cpp
Index: clang-tools-extra/clangd/unittests/SerializationTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SerializationTests.cpp
+++ clang-tools-extra/clangd/unittests/SerializationTests.cpp
@@ -366,9 +366,9 @@
Pos += FileDigest.size();
// Varints are little-endian base-128 numbers, where the top-bit of each byte
- // indicates whether there are more. 8fffffff7f -> 0xffffffff.
+ // indicates whether there are more. 8fffffff0f -> 0xffffffff.
std::string CorruptSrcs =
- (Srcs->Data.take_front(Pos) + llvm::fromHex("8fffffff7f") +
+ (Srcs->Data.take_front(Pos) + llvm::fromHex("8fffffff0f") +
"some_random_garbage")
.str();
Srcs->Data = CorruptSrcs;
Index: clang-tools-extra/clangd/index/Serialization.cpp
===================================================================
--- clang-tools-extra/clangd/index/Serialization.cpp
+++ clang-tools-extra/clangd/index/Serialization.cpp
@@ -87,6 +87,7 @@
uint32_t Val = B & ~More;
for (int Shift = 7; B & More && Shift < 32; Shift += 7) {
B = consume8();
+ assert((B & ~More) < (1 << (32 - Shift)) && "Invalid varint encoding");
Val |= (B & ~More) << Shift;
}
return Val;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91405.305054.patch
Type: text/x-patch
Size: 1267 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201113/f8533e8e/attachment.bin>
More information about the cfe-commits
mailing list