]> granicus.if.org Git - clang/commit
[analyzer] CStringChecker: pr34460: Avoid a crash when a cast is not modeled.
authorArtem Dergachev <artem.dergachev@gmail.com>
Fri, 13 Oct 2017 20:11:00 +0000 (20:11 +0000)
committerArtem Dergachev <artem.dergachev@gmail.com>
Fri, 13 Oct 2017 20:11:00 +0000 (20:11 +0000)
commit89ba86c158ce787d14f0352b2bffc6bacd71d02e
tree5ff0524376e33f906d862f1de8e05d788ded3da3
parentecbf0ff4530604388091502bba3adba5f60a351a
[analyzer] CStringChecker: pr34460: Avoid a crash when a cast is not modeled.

The checker used to crash when a mempcpy's length argument is symbolic. In this
case the cast from 'void *' to 'char *' failed because the respective
ElementRegion that represents cast is hard to add on top of the existing
ElementRegion that represents the offset to the last copied byte, while
preseving a sane memory region structure.

Additionally, a few test cases are added (to casts.c) which demonstrate problems
caused by existing sloppy work we do with multi-layer ElementRegions. If said
cast would be modeled properly in the future, these tests would need to be
taken into account.

Differential Revision: https://reviews.llvm.org/D38797

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315742 91177308-0d34-0410-b5e6-96231b3b80d8
lib/StaticAnalyzer/Checkers/CStringChecker.cpp
test/Analysis/bstring.cpp
test/Analysis/casts.c