summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/PrintfFormatString.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* Type Type::isRealFloatingType() that vectors are not floating-pointDouglas Gregor2010-06-221-1/+1
| | | | | | | | | types, updating callers of both isFloatingType() and isRealFloatingType() accordingly. Caught at least one issue where we allowed one to declare a vector of vectors (!), along with cleaning up the standard-conversion logic for C++. llvm-svn: 106595
* Printf format strings: Added some more tests and fixed some minor bugs.Tom Care2010-06-181-3/+4
| | | | | | | | | | | | | | - Precision toStrings shouldn't print a dot when they have no value. - Length of char length modifier is now returned correctly. - Added several fixit tests. Note: fixit tests are currently broken due to a bug in HighlightRange. Marking as XFAIL for now. M test/Sema/format-strings-fixit.c M include/clang/Analysis/Analyses/PrintfFormatString.h M lib/Analysis/PrintfFormatString.cpp llvm-svn: 106275
* Bug 7394 - Fixed toString representation of Precisions in format strings.Tom Care2010-06-171-0/+3
| | | | | | | M include/clang/Analysis/Analyses/PrintfFormatString.h M lib/Analysis/PrintfFormatString.cpp llvm-svn: 106245
* Bug 7377: Fixed several bad printf format string bugs.Tom Care2010-06-171-11/+234
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Added warning for undefined behavior when using field specifier - Added warning for undefined behavior when using length modifier - Fixed warnings for invalid flags - Added warning for ignored flags - Added fixits for the above warnings - Fixed accuracy of detecting several undefined behavior conditions - Receive normal warnings in addition to security warnings when using %n - Fix bug where '+' flag would remain on unsigned conversion suggestions Summary of changes: - Added expanded tests - Added/expanded warnings - Added position info to OptionalAmounts for fixits - Extracted optional flags to a wrapper class with position info for fixits - Added several methods to validate a FormatSpecifier by component, each checking for undefined behavior - Fixed conversion specifier checking to conform to C99 standard - Added hooks to detect the invalid states in CheckPrintfHandler::HandleFormatSpecifier Note: warnings involving the ' ' (space) flag are temporarily disabled until whitespace highlighting no longer triggers assertions. I will make a post about this on cfe-dev shortly. M test/Sema/format-strings.c M include/clang/Basic/DiagnosticSemaKinds.td M include/clang/Analysis/Analyses/PrintfFormatString.h M lib/Analysis/PrintfFormatString.cpp M lib/Sema/SemaChecking.cpp llvm-svn: 106233
* Extend format string type-checking to include '%p'. Fixes remaining cases ↵Ted Kremenek2010-06-161-76/+92
| | | | | | PR 4468. llvm-svn: 106151
* Small fixes regarding printf fix suggestions.Tom Care2010-06-111-0/+8
| | | | | | | | | | | | - Added some handling of flags that become invalid when changing the conversion specifier. - Changed fixit behavior to remove unnecessary length modifiers. - Separated some tests out and added some comments. modified: lib/Analysis/PrintfFormatString.cpp test/Sema/format-strings-fixit.c llvm-svn: 105807
* Fix a typo that breaks the GCC build. Turns out that Clang isn'tDouglas Gregor2010-06-091-1/+1
| | | | | | | diagnosing this code as an error when it should, so I've filed http://llvm.org/bugs/show_bug.cgi?id=7325. llvm-svn: 105683
* Added FixIt support to printf format string checking.Tom Care2010-06-091-33/+228
| | | | | | | | | | | | | | | | - Refactored LengthModifier to be a class. - Added toString methods in all member classes of FormatSpecifier. - FixIt suggestions keep user specified flags unless incorrect. Limitations: - The suggestions are not conversion specifier sensitive. For example, if we have a 'pad with zeroes' flag, and the correction is a string conversion specifier, we do not remove the flag. Clang will warn us on the next compilation. A test/Sema/format-strings-fixit.c M include/clang/Analysis/Analyses/PrintfFormatString.h M lib/Analysis/PrintfFormatString.cpp M lib/Sema/SemaChecking.cpp llvm-svn: 105680
* Fix '+=' accumulation error when parsing numeric amounts in a format string.Ted Kremenek2010-03-251-1/+1
| | | | llvm-svn: 99479
* Allow a '0' precision in format strings (as the man page says it is okay).Ted Kremenek2010-03-011-10/+18
| | | | | | Fixes <rdar://problem/7700339>. llvm-svn: 97482
* For printf format string checking, add support for positional format strings.Ted Kremenek2010-02-271-15/+134
| | | | | | Along the way, coelesce some of the diagnostics. llvm-svn: 97297
* For printf format string checking, move the tracking of the data argument ↵Ted Kremenek2010-02-261-13/+21
| | | | | | | | | index out of Sema and into analyze_printf::ParseFormatString(). Also use a bitvector to determine what arguments have been covered (instead of just checking to see if the last argument consumed is the max argument). This is prep. for support positional arguments (an IEEE extension). llvm-svn: 97248
* Add support for '%C' and '%S' printf conversion specifiers.Ted Kremenek2010-02-241-22/+35
| | | | llvm-svn: 97005
* Refactor the logic for printf argument type-checking into ↵Ted Kremenek2010-02-161-32/+143
| | | | | | | | | | analyze_printf::ArgTypeResult. Implement printf argument type checking for '%s'. Fixes <rdar://problem/3065808>. llvm-svn: 96310
* Convert tabs to spaces.Ted Kremenek2010-02-091-5/+5
| | | | llvm-svn: 95621
* Move ParseFormatString() and FormatStringHandler back into the ↵Ted Kremenek2010-02-041-2/+4
| | | | | | analyze_printf namespace. llvm-svn: 95324
* Add format string type checking support for 'long double'.Ted Kremenek2010-02-011-1/+4
| | | | llvm-svn: 95026
* Recognize 'q' as a format length modifier (from BSD).Daniel Dunbar2010-01-301-0/+1
| | | | llvm-svn: 94894
* Add format string checking of 'double' arguments. Fixes ↵Ted Kremenek2010-01-301-0/+3
| | | | | | <rdar://problem/6931734>. llvm-svn: 94867
* Fix spacing.Ted Kremenek2010-01-291-1/+1
| | | | llvm-svn: 94852
* Per a suggestion from Cristian Draghici, add a method to FormatSpecifier ↵Ted Kremenek2010-01-291-0/+53
| | | | | | that returns the expected type of the matching data argument. It isn't complete, but should handle several of the important cases. llvm-svn: 94851
* Enhancements to the alternate (WIP) format string checking:Ted Kremenek2010-01-291-2/+10
| | | | | | | | | | - Add ConversionSpecifier::consumesDataArgument() as a helper method to determine if a conversion specifier requires a matching argument. - Add support for glibc-specific '%m' conversion - Add an extra callback to HandleNull() for locations within the format specifier that have a null character llvm-svn: 94834
* Alternate format string checking: issue warnings for incomplete format ↵Ted Kremenek2010-01-291-13/+11
| | | | | | | | | | specifiers. In addition, move ParseFormatString() and FormatStringHandler() from the clang::analyze_printf to the clang namespace. Hopefully this will resolve some link errors on Linux. llvm-svn: 94794
* Alternate format string checking: issue a warning for invalid conversion ↵Ted Kremenek2010-01-291-13/+18
| | | | | | specifiers. llvm-svn: 94792
* Yet another attempt to make the Linux buildbots happy. Apparently there are ↵Ted Kremenek2010-01-291-4/+7
| | | | | | differences on how nested namespaces are handled... llvm-svn: 94790
* Move definition of FormatStringHandler::~FormatStringHandler() within ↵Ted Kremenek2010-01-291-1/+1
| | | | | | namespace directives. Hopefully this will make the Linux buildbots happy. llvm-svn: 94784
* Add precision/field width checking to AlternateCheckPrintfString().Ted Kremenek2010-01-291-4/+6
| | | | llvm-svn: 94774
* Fix off-by-one error in ParseFormatSpecifier() when reporting the location ↵Ted Kremenek2010-01-281-3/+2
| | | | | | of a null character. llvm-svn: 94762
* Add position of conversion specifier character to 'ConversionSpecifier'.Ted Kremenek2010-01-281-26/+31
| | | | llvm-svn: 94739
* Rename namespace clang::printf to clang::analyze_printf to avoid problems ↵Ted Kremenek2010-01-281-4/+4
| | | | | | where the reference to 'printf' is ambiguous. llvm-svn: 94733
* Allow HandleFormatSpecifier() to indicate that no more processing of the ↵Ted Kremenek2010-01-281-1/+2
| | | | | | format string is desired. llvm-svn: 94715
* Add '@' conversion specifier.Ted Kremenek2010-01-281-4/+5
| | | | llvm-svn: 94713
* Remove invalid conversion specifiers from format string checking.Ted Kremenek2010-01-281-5/+0
| | | | llvm-svn: 94707
* Add a few more conversion specifiers to ParseFormatSpecifier (these appear ↵Ted Kremenek2010-01-281-20/+27
| | | | | | in SemaChecking). llvm-svn: 94704
* Add skeleton for a more structured way to analyzing pring formatTed Kremenek2010-01-271-0/+239
strings than what we currently have in Sema. This is both an experiment and a WIP. The idea is simple: parse the format string incrementally, constructing a well-structure representation of each format specifier. Each format specifier is then handed back one-by-one to a client via a callback. Malformed format strings are also handled with callbacks. The idea is to separate the parsing of the format string from the emission of diagnostics. Currently what we have in Sema for handling format strings is a mongrel of both that is hard to follow and difficult to modify (I can apply this label since I'm the original author of that code). This is in libAnalysis as it is reasonable generic and can potentially be used both by libSema and libChecker. Comments welcome. llvm-svn: 94702
OpenPOWER on IntegriCloud