forked from OSchip/llvm-project
Don't warn about using PredefinedExprs as format string literals. These never can be a real security issue.
Fixes PR 9314. llvm-svn: 126447
This commit is contained in:
parent
27361a7124
commit
a8890833f2
|
@ -875,7 +875,7 @@ bool Sema::SemaBuiltinLongjmp(CallExpr *TheCall) {
|
|||
return false;
|
||||
}
|
||||
|
||||
// Handle i > 1 ? "x" : "y", recursivelly
|
||||
// Handle i > 1 ? "x" : "y", recursively.
|
||||
bool Sema::SemaCheckStringLiteral(const Expr *E, const CallExpr *TheCall,
|
||||
bool HasVAListArg,
|
||||
unsigned format_idx, unsigned firstDataArg,
|
||||
|
@ -918,6 +918,12 @@ bool Sema::SemaCheckStringLiteral(const Expr *E, const CallExpr *TheCall,
|
|||
}
|
||||
return false;
|
||||
|
||||
case Stmt::PredefinedExprClass:
|
||||
// While __func__, etc., are technically not string literals, they
|
||||
// cannot contain format specifiers and thus are not a security
|
||||
// liability.
|
||||
return true;
|
||||
|
||||
case Stmt::DeclRefExprClass: {
|
||||
const DeclRefExpr *DR = cast<DeclRefExpr>(E);
|
||||
|
||||
|
|
|
@ -350,3 +350,11 @@ void posix_extensions() {
|
|||
void pr8486() {
|
||||
printf("%s", 1); // expected-warning{{conversion specifies type 'char *' but the argument has type 'int'}}
|
||||
}
|
||||
|
||||
// PR9314
|
||||
// Don't warn about string literals that are PreDefinedExprs, e.g. __func__.
|
||||
void pr9314() {
|
||||
printf(__PRETTY_FUNCTION__); // no-warning
|
||||
printf(__func__); // no-warning
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue