From: Devin Coughlin Date: Fri, 16 Dec 2016 18:41:40 +0000 (+0000) Subject: [analyzer] Fix crash in MallocChecker. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b206e2ea7775db49cd2a0b21f64c792b2b9e1ec7;p=clang [analyzer] Fix crash in MallocChecker. Fix a crash in the MallocChecker when the extent size for the argument to new[] is not known. A patch by Abramo Bagnara and Dániel Krupp! https://reviews.llvm.org/D27849 Differential Revision: https://reviews.llvm.org/D27849 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289970 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Checkers/MallocChecker.cpp b/lib/StaticAnalyzer/Checkers/MallocChecker.cpp index 07c607212d..f7c4ea10c4 100644 --- a/lib/StaticAnalyzer/Checkers/MallocChecker.cpp +++ b/lib/StaticAnalyzer/Checkers/MallocChecker.cpp @@ -1026,8 +1026,7 @@ ProgramStateRef MallocChecker::addExtentSize(CheckerContext &C, ASTContext &AstContext = C.getASTContext(); CharUnits TypeSize = AstContext.getTypeSizeInChars(ElementType); - if (Optional DefinedSize = - ElementCount.getAs()) { + if (ElementCount.getAs()) { DefinedOrUnknownSVal Extent = Region->getExtent(svalBuilder); // size in Bytes = ElementCount*TypeSize SVal SizeInBytes = svalBuilder.evalBinOpNN( diff --git a/test/Analysis/out-of-bounds-new.cpp b/test/Analysis/out-of-bounds-new.cpp index 41ecbeeba6..ee7bb1ec44 100644 --- a/test/Analysis/out-of-bounds-new.cpp +++ b/test/Analysis/out-of-bounds-new.cpp @@ -148,3 +148,9 @@ void test_dynamic_size(int s) { int *buf = new int[s]; buf[0] = 1; // no-warning } +//Tests complex arithmetic +//in new expression +void test_dynamic_size2(unsigned m,unsigned n){ + unsigned *U = nullptr; + U = new unsigned[m + n + 1]; +}