diff options
author | Jordan Rose <jordan_rose@apple.com> | 2014-08-20 16:58:09 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2014-08-20 16:58:09 +0000 |
commit | ba129af62aab1eaeb44ae28a2a25fb326e9509f8 (patch) | |
tree | 6d8c9be0ae252f204d3f868b9140471aa4555fe5 /clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp | |
parent | cd4db5c6d2993fcb0d0836032a4637b8f8eabb62 (diff) | |
download | bcm5719-llvm-ba129af62aab1eaeb44ae28a2a25fb326e9509f8.tar.gz bcm5719-llvm-ba129af62aab1eaeb44ae28a2a25fb326e9509f8.zip |
[analyzer] UnixAPI: Check that the third argument to open(2) (if present) is an integer.
Patch by Daniel Fahlgren.
llvm-svn: 216079
Diffstat (limited to 'clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp index e7626ca24b6..4bfed8504f9 100644 --- a/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/UnixAPIChecker.cpp @@ -95,6 +95,15 @@ void UnixAPIChecker::CheckOpen(CheckerContext &C, const CallExpr *CE) const { // The frontend should issue a warning for this case, so this is a sanity // check. return; + } else if (CE->getNumArgs() == 3) { + const Expr *Arg = CE->getArg(2); + QualType QT = Arg->getType(); + if (!QT->isIntegerType()) { + ReportOpenBug(C, state, + "Third argument to 'open' is not an integer", + Arg->getSourceRange()); + return; + } } else if (CE->getNumArgs() > 3) { ReportOpenBug(C, state, "Call to 'open' with more than three arguments", |