[PATCH] D77062: [analyzer] Added check for unacceptable equality operation between Loc and NonLoc types
Denys Petrov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 4 04:51:03 PDT 2020
ASDenysPetrov updated this revision to Diff 268424.
ASDenysPetrov added a comment.
Removed `V.getAs<nonloc::LazyCompoundVal>()` from `if`.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D77062/new/
https://reviews.llvm.org/D77062
Files:
clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
clang/test/Analysis/string.c
Index: clang/test/Analysis/string.c
===================================================================
--- clang/test/Analysis/string.c
+++ clang/test/Analysis/string.c
@@ -363,6 +363,14 @@
strcpy(x, y); // no-warning
}
+void *func_strcpy_no_assertion();
+char ***ptr_strcpy_no_assertion;
+void strcpy_no_assertion() {
+ *(unsigned char **)ptr_strcpy_no_assertion = (unsigned char *)(func_strcpy_no_assertion());
+ char c;
+ strcpy(**ptr_strcpy_no_assertion, &c); // no-assertion
+}
+
//===----------------------------------------------------------------------===
// stpcpy()
//===----------------------------------------------------------------------===
Index: clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
===================================================================
--- clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
+++ clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
@@ -282,13 +282,15 @@
std::pair<ProgramStateRef , ProgramStateRef >
CStringChecker::assumeZero(CheckerContext &C, ProgramStateRef state, SVal V,
QualType Ty) {
+ auto states = std::make_pair(state, state);
+
Optional<DefinedSVal> val = V.getAs<DefinedSVal>();
- if (!val)
- return std::pair<ProgramStateRef , ProgramStateRef >(state, state);
+ if (val) {
+ // return pair shall be {null, non-null} so reorder states
+ std::tie(states.second, states.first) = state->assume(*val);
+ }
- SValBuilder &svalBuilder = C.getSValBuilder();
- DefinedOrUnknownSVal zero = svalBuilder.makeZeroVal(Ty);
- return state->assume(svalBuilder.evalEQ(state, *val, zero));
+ return states;
}
ProgramStateRef CStringChecker::checkNonNull(CheckerContext &C,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77062.268424.patch
Type: text/x-patch
Size: 1705 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200604/7df01275/attachment.bin>
More information about the cfe-commits
mailing list