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 | |
| 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')
| -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; | 

