diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-07-20 20:04:47 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-07-20 20:04:47 +0000 |
commit | 4407ea494881e9dd7de285ea2649beb1fd7ea4a0 (patch) | |
tree | 483dbe9db22a980279b30e258b28818ecd95757f /clang/lib/Sema/SemaChecking.cpp | |
parent | ea28f83a5fe9ce58409ebdf3a26fe1db2034e456 (diff) | |
download | bcm5719-llvm-4407ea494881e9dd7de285ea2649beb1fd7ea4a0.tar.gz bcm5719-llvm-4407ea494881e9dd7de285ea2649beb1fd7ea4a0.zip |
Hookup checking for invalid length modifiers in scanf format strings.
llvm-svn: 108907
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 8846c25724e..2887a50d527 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -1701,9 +1701,17 @@ bool CheckScanfHandler::HandleScanfSpecifier( CoveredArgs.set(argIndex); } - // FIXME: Check that the length modifier is valid with the given - // conversion specifier. - + // Check the length modifier is valid with the given conversion specifier. + const LengthModifier &LM = FS.getLengthModifier(); + if (!FS.hasValidLengthModifier()) { + S.Diag(getLocationOfByte(LM.getStart()), + diag::warn_format_nonsensical_length) + << LM.toString() << CS.toString() + << getSpecifierRange(startSpecifier, specifierLen) + << FixItHint::CreateRemoval(getSpecifierRange(LM.getStart(), + LM.getLength())); + } + // The remaining checks depend on the data arguments. if (HasVAListArg) return true; |