]> granicus.if.org Git - clang/commitdiff
scanf analysis: don't bail out after successful parse of scanlist
authorHans Wennborg <hans@hanshq.net>
Thu, 12 Jan 2012 14:44:54 +0000 (14:44 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 12 Jan 2012 14:44:54 +0000 (14:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@148025 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScanfFormatString.cpp
test/Sema/format-strings-scanf.c

index e8bd0d0e246b21ee9f1d76a75513a52f8ba187bf..d248476e47fbd0459703f63eb767de2d7daf838a 100644 (file)
@@ -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);
index d1374d4bf963980ae9926545f6ae5a2c23973c84..2e32a26ac5cd0b74ad53cc608b80fb78ca2d1d51 100644 (file)
@@ -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