diff options
| -rw-r--r-- | clang/lib/StaticAnalyzer/Checkers/GenericTaintChecker.cpp | 3 | ||||
| -rw-r--r-- | clang/test/Analysis/taint-generic.c | 6 | 
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/StaticAnalyzer/Checkers/GenericTaintChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/GenericTaintChecker.cpp index 800bbf991d0..3186abebc26 100644 --- a/clang/lib/StaticAnalyzer/Checkers/GenericTaintChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/GenericTaintChecker.cpp @@ -646,7 +646,8 @@ bool GenericTaintChecker::isStdin(const Expr *E, CheckerContext &C) {      if ((D->getName().find("stdin") != StringRef::npos) && D->isExternC())          if (const PointerType * PtrTy =                dyn_cast<PointerType>(D->getType().getTypePtr())) -          if (PtrTy->getPointeeType() == C.getASTContext().getFILEType()) +          if (PtrTy->getPointeeType().getCanonicalType() == +              C.getASTContext().getFILEType().getCanonicalType())              return true;    }    return false; diff --git a/clang/test/Analysis/taint-generic.c b/clang/test/Analysis/taint-generic.c index d3ca246b82a..2717e91b430 100644 --- a/clang/test/Analysis/taint-generic.c +++ b/clang/test/Analysis/taint-generic.c @@ -1,10 +1,16 @@  // RUN: %clang_analyze_cc1  -analyzer-checker=alpha.security.taint,core,alpha.security.ArrayBoundV2 -Wno-format-security -verify %s +// RUN: %clang_analyze_cc1  -DFILE_IS_STRUCT -analyzer-checker=alpha.security.taint,core,alpha.security.ArrayBoundV2 -Wno-format-security -verify %s  int scanf(const char *restrict format, ...);  int getchar(void);  typedef struct _FILE FILE; +#ifdef FILE_IS_STRUCT +extern struct _FILE *stdin; +#else  extern FILE *stdin; +#endif +  int fscanf(FILE *restrict stream, const char *restrict format, ...);  int sprintf(char *str, const char *format, ...);  void setproctitle(const char *fmt, ...);  | 

