diff options
| -rw-r--r-- | clang/lib/Analysis/ScanfFormatString.cpp | 2 | ||||
| -rw-r--r-- | clang/test/Sema/format-strings-scanf.c | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/Analysis/ScanfFormatString.cpp b/clang/lib/Analysis/ScanfFormatString.cpp index e8bd0d0e246..d248476e47f 100644 --- a/clang/lib/Analysis/ScanfFormatString.cpp +++ b/clang/lib/Analysis/ScanfFormatString.cpp @@ -176,7 +176,7 @@ static ScanfSpecifierResult ParseScanfSpecifier(FormatStringHandler &H, } ScanfConversionSpecifier CS(conversionPosition, k); if (k == ScanfConversionSpecifier::ScanListArg) { - if (!ParseScanList(H, CS, I, E)) + if (ParseScanList(H, CS, I, E)) return true; } FS.setConversionSpecifier(CS); diff --git a/clang/test/Sema/format-strings-scanf.c b/clang/test/Sema/format-strings-scanf.c index d1374d4bf96..2e32a26ac5c 100644 --- a/clang/test/Sema/format-strings-scanf.c +++ b/clang/test/Sema/format-strings-scanf.c @@ -68,6 +68,10 @@ 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) { + scanf("%[abc]", ip); // expected-warning{{conversion specifies type 'char *' but the argument has type 'int *'}} +} + void test_alloc_extension(char **sp, wchar_t **lsp) { /* Make sure "%a" gets parsed as a conversion specifier for float, * even when followed by an 's', 'S' or '[', which would cause it to be |

