forked from OSchip/llvm-project
[analyzer] Don't crash if malloc() has an unexpected function prototype.
Patch by Daniel Fahlgren! llvm-svn: 217258
This commit is contained in:
parent
901ba6ea2e
commit
f69e65f75c
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
Loading…
Reference in New Issue