[PATCH] D91258: [clangd] Sanity-check array sizes read from disk before allocating them.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 13 03:16:44 PST 2020
sammccall added a comment.
In D91258#2392646 <https://reviews.llvm.org/D91258#2392646>, @eugenis wrote:
> Hi Sam,
>
> this patch is failing on the ubsan bot with:
>
> [ RUN ] SerializationTest.NoCrashOnBadArraySize
> /b/sanitizer-x86_64-linux-fast/build/llvm-project/clang-tools-extra/clangd/index/Serialization.cpp:90:26: runtime error: left shift of 127 by 28 places cannot be represented in type 'int'
> #0 0x392dd57 in clang::clangd::(anonymous namespace)::Reader::consumeVar() /b/sanitizer-x86_64-linux-fast/build/llvm-project/clang-tools-extra/clangd/index/Serialization.cpp:90:26
Thanks Evgenii! (It's really surprising to me this is using signed arithmetic!)
Is the sanitizer strictly correct here that this is UB? From my reading only C requires the result of signed shifts to be representable, not C++. https://eel.is/c++draft/expr.shift
So this should be well-defined with the same result as the unsigned arithmetic (assuming 2s complement, I guess).
(We'll fix this to use unsigned arithmetic in any case)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D91258/new/
https://reviews.llvm.org/D91258
More information about the cfe-commits
mailing list