diff options
-rw-r--r-- | lib/StaticAnalyzer/Checkers/ObjCContainersChecker.cpp | 9 | ||||
-rw-r--r-- | test/Analysis/CFContainers.mm | 4 |
2 files changed, 10 insertions, 3 deletions
diff --git a/lib/StaticAnalyzer/Checkers/ObjCContainersChecker.cpp b/lib/StaticAnalyzer/Checkers/ObjCContainersChecker.cpp index 69e8fbb7ab..207d65ad8f 100644 --- a/lib/StaticAnalyzer/Checkers/ObjCContainersChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/ObjCContainersChecker.cpp @@ -40,7 +40,6 @@ class ObjCContainersChecker : public Checker< check::PreStmt<CallExpr>, inline SymbolRef getArraySym(const Expr *E, CheckerContext &C) const { SVal ArrayRef = C.getState()->getSVal(E, C.getLocationContext()); SymbolRef ArraySym = ArrayRef.getAsSymbol(); - assert(ArraySym); return ArraySym; } @@ -120,8 +119,12 @@ void ObjCContainersChecker::checkPreStmt(const CallExpr *CE, // Retrieve the size. // Find out if we saw this array symbol before and have information about it. const Expr *ArrayExpr = CE->getArg(0); - const DefinedSVal *Size = - State->get<ArraySizeMap>(getArraySym(ArrayExpr, C)); + SymbolRef ArraySym = getArraySym(ArrayExpr, C); + if (!ArraySym) + return; + + const DefinedSVal *Size = State->get<ArraySizeMap>(ArraySym); + if (!Size) return; diff --git a/test/Analysis/CFContainers.mm b/test/Analysis/CFContainers.mm index e8166eba8d..7d6c175d1f 100644 --- a/test/Analysis/CFContainers.mm +++ b/test/Analysis/CFContainers.mm @@ -198,3 +198,7 @@ void TestConst(CFArrayRef A, CFIndex sIndex, void* x[]) { const void *s1 = CFArrayGetValueAtIndex(B, 2); } + +void TestNullArray() { + CFArrayGetValueAtIndex(0, 0); +} |