From: Ted Kremenek Date: Fri, 20 Jan 2012 22:11:52 +0000 (+0000) Subject: The 'l' length modifier makes sense with the scanlist conversion specifier. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ef1440b6eca118d46291166ce3302f9bba8e639b;p=clang The 'l' length modifier makes sense with the scanlist conversion specifier. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148586 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/FormatString.cpp b/lib/Analysis/FormatString.cpp index 207f77301b..fb52742bb0 100644 --- a/lib/Analysis/FormatString.cpp +++ b/lib/Analysis/FormatString.cpp @@ -531,6 +531,7 @@ bool FormatSpecifier::hasValidLengthModifier() const { case ConversionSpecifier::nArg: case ConversionSpecifier::cArg: case ConversionSpecifier::sArg: + case ConversionSpecifier::ScanListArg: return true; default: return false; diff --git a/test/Sema/format-strings-scanf.c b/test/Sema/format-strings-scanf.c index e954958c52..6962a97611 100644 --- a/test/Sema/format-strings-scanf.c +++ b/test/Sema/format-strings-scanf.c @@ -71,9 +71,11 @@ void test_variants(int *i, const char *s, ...) { vsscanf(buf, "%[abc", ap); // expected-warning{{no closing ']' for '%[' in scanf format string}} } -void test_scanlist(int *ip, char *sp) { +void test_scanlist(int *ip, char *sp, wchar_t *ls) { scanf("%[abc]", ip); // expected-warning{{format specifies type 'char *' but the argument has type 'int *'}} scanf("%h[abc]", sp); // expected-warning{{length modifier 'h' results in undefined behavior or no effect with '[' conversion specifier}} + scanf("%l[xyx]", ls); // no-warning + scanf("%ll[xyx]", ls); // expected-warning {{length modifier 'll' results in undefined behavior or no effect with '[' conversion specifier}} } void test_alloc_extension(char **sp, wchar_t **lsp, float *fp) { @@ -100,3 +102,4 @@ void test_alloc_extension(char **sp, wchar_t **lsp, float *fp) { scanf("%mC", fp); // expected-warning{{format specifies type 'wchar_t **' (aka 'int **') but the argument has type 'float *'}} scanf("%m[abc]", fp); // expected-warning{{format specifies type 'char **' but the argument has type 'float *'}} } +