ValueFlow: Set values to parameters to escape functions (#3994)

* ValueFlow: Set values to parameters to escape functions

* Format
This commit is contained in:
Paul Fultz II 2022-04-11 00:23:58 -05:00 committed by GitHub
parent d97942d3c6
commit 99757c6d06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 2 deletions

View File

@ -131,9 +131,13 @@ struct ForwardTraversal {
// If we are in a loop then jump to the end
if (out)
*out = loopEnds.back();
} else if (Token::Match(tok, "return|throw") || isEscapeFunction(tok, &settings->library)) {
traverseRecursive(tok->astOperand1(), f, traverseUnknown);
} else if (Token::Match(tok, "return|throw")) {
traverseRecursive(tok->astOperand2(), f, traverseUnknown);
traverseRecursive(tok->astOperand1(), f, traverseUnknown);
return Break(Analyzer::Terminate::Escape);
} else if (Token::Match(tok, "%name% (") && isEscapeFunction(tok, &settings->library)) {
// Traverse the parameters of the function before escaping
traverseRecursive(tok->next()->astOperand2(), f, traverseUnknown);
return Break(Analyzer::Terminate::Escape);
} else if (isUnevaluated(tok)) {
if (out)

View File

@ -3472,6 +3472,12 @@ private:
" if (x == 42) {}\n"
"}";
ASSERT_EQUALS(false, testValueOfX(code, 6U, 11));
code = "void f() {\n"
" int x = 1;\n"
" exit(x);\n"
"}\n";
ASSERT_EQUALS(true, testValueOfXKnown(code, 3U, 1));
}
void valueFlowForwardTernary() {