diff options
| author | Ted Kremenek <kremenek@apple.com> | 2010-07-19 19:47:40 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2010-07-19 19:47:40 +0000 |
| commit | 5c3e1b9a54ac387ff770795be0516ef7bfd2603f (patch) | |
| tree | 489fda017a57e093a318d49bef9113e8ee7c9566 | |
| parent | 99b5524324eab9457af1d7cb392f0a48f1b854ba (diff) | |
| download | bcm5719-llvm-5c3e1b9a54ac387ff770795be0516ef7bfd2603f.tar.gz bcm5719-llvm-5c3e1b9a54ac387ff770795be0516ef7bfd2603f.zip | |
Add missing conversion specifier parsing for 'u', 'x', 'o', and 's'. Fixes <rdar://problem/8204052>.
llvm-svn: 108742
| -rw-r--r-- | clang/lib/Analysis/ScanfFormatString.cpp | 4 | ||||
| -rw-r--r-- | clang/test/Sema/format-strings-scanf.c | 3 |
2 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Analysis/ScanfFormatString.cpp b/clang/lib/Analysis/ScanfFormatString.cpp index a5fe77ddd88..0ea0754313d 100644 --- a/clang/lib/Analysis/ScanfFormatString.cpp +++ b/clang/lib/Analysis/ScanfFormatString.cpp @@ -163,6 +163,10 @@ static ScanfSpecifierResult ParseScanfSpecifier(FormatStringHandler &H, case 'C': k = ConversionSpecifier::CArg; break; case 'S': k = ConversionSpecifier::SArg; break; case '[': k = ConversionSpecifier::ScanListArg; break; + case 'u': k = ConversionSpecifier::uArg; break; + case 'x': k = ConversionSpecifier::xArg; break; + case 'o': k = ConversionSpecifier::oArg; break; + case 's': k = ConversionSpecifier::sArg; break; } ConversionSpecifier CS(conversionPosition, k); if (k == ConversionSpecifier::ScanListArg) { diff --git a/clang/test/Sema/format-strings-scanf.c b/clang/test/Sema/format-strings-scanf.c index 5341ad5ee9b..ac53d66bf63 100644 --- a/clang/test/Sema/format-strings-scanf.c +++ b/clang/test/Sema/format-strings-scanf.c @@ -12,4 +12,7 @@ void test(const char *s, int *i) { scanf("%0d", i); // expected-warning{{zero field width in scanf format string is unused}} scanf("%00d", i); // expected-warning{{zero field width in scanf format string is unused}} scanf("%d%[asdfasdfd", i, s); // expected-warning{{no closing ']' for '%[' in scanf format string}} + + unsigned short s_x; + scanf ("%" "hu" "\n", &s_x); // no-warning } |

