зеркало из https://github.com/microsoft/clang-1.git
[analyzer] We were silently stopping exploring the path after
visiting 'return;' statement! This most likely caused us to skip a bunch of code when analyzing with inlining. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151368 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
a0889a8c32
Коммит
e55b03a6e4
|
@ -432,7 +432,4 @@ void ExprEngine::VisitReturnStmt(const ReturnStmt *RS, ExplodedNode *Pred,
|
|||
B.generateNode(RS, *it, (*it)->getState());
|
||||
}
|
||||
}
|
||||
else {
|
||||
B.takeNodes(dstPreVisit);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,3 +69,19 @@ void test5() {
|
|||
int *data;
|
||||
my_free1((int*)data);
|
||||
}
|
||||
|
||||
// Test that we keep processing after 'return;'
|
||||
void fooWithEmptyReturn(int x) {
|
||||
if (x)
|
||||
return;
|
||||
x++;
|
||||
return;
|
||||
}
|
||||
|
||||
int uafAndCallsFooWithEmptyReturn() {
|
||||
int *x = (int*)malloc(12);
|
||||
free(x);
|
||||
fooWithEmptyReturn(12);
|
||||
return *x; // expected-warning {{Use of memory after it is freed}}
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче