[analyzer] Don't crash if malloc() has an unexpected function prototype.

Patch by Daniel Fahlgren!

llvm-svn: 217258
This commit is contained in:
Jordan Rose 2014-09-05 16:33:51 +00:00
parent 901ba6ea2e
commit f69e65f75c
2 changed files with 21 additions and 4 deletions

View File

@ -901,6 +901,10 @@ ProgramStateRef MallocChecker::MallocMemAux(CheckerContext &C,
ProgramStateRef State,
AllocationFamily Family) {
// We expect the malloc functions to return a pointer.
if (!Loc::isLocType(CE->getType()))
return nullptr;
// Bind the return value to the symbolic value from the heap region.
// TODO: We could rewrite post visit to eval call; 'malloc' does not have
// side effects other than what we model here.
@ -911,10 +915,6 @@ ProgramStateRef MallocChecker::MallocMemAux(CheckerContext &C,
.castAs<DefinedSVal>();
State = State->BindExpr(CE, C.getLocationContext(), RetVal);
// We expect the malloc functions to return a pointer.
if (!RetVal.getAs<Loc>())
return nullptr;
// Fill the region with the initialization value.
State = State->bindDefault(RetVal, Init);

View File

@ -0,0 +1,17 @@
// RUN: %clang_cc1 -w -analyze -analyzer-checker=core,unix.Malloc -verify %s
// expected-no-diagnostics
// Test that strange prototypes doesn't crash the analyzer
void malloc(int i);
void valloc(int i);
void test1()
{
malloc(1);
}
void test2()
{
valloc(1);
}