diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-07-20 20:04:47 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-07-20 20:04:47 +0000 |
commit | 4407ea494881e9dd7de285ea2649beb1fd7ea4a0 (patch) | |
tree | 483dbe9db22a980279b30e258b28818ecd95757f /clang/test/Sema/format-strings-scanf.c | |
parent | ea28f83a5fe9ce58409ebdf3a26fe1db2034e456 (diff) | |
download | bcm5719-llvm-4407ea494881e9dd7de285ea2649beb1fd7ea4a0.tar.gz bcm5719-llvm-4407ea494881e9dd7de285ea2649beb1fd7ea4a0.zip |
Hookup checking for invalid length modifiers in scanf format strings.
llvm-svn: 108907
Diffstat (limited to 'clang/test/Sema/format-strings-scanf.c')
-rw-r--r-- | clang/test/Sema/format-strings-scanf.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/test/Sema/format-strings-scanf.c b/clang/test/Sema/format-strings-scanf.c index 68552b3e241..42b6c03ffbf 100644 --- a/clang/test/Sema/format-strings-scanf.c +++ b/clang/test/Sema/format-strings-scanf.c @@ -2,6 +2,7 @@ typedef __typeof(sizeof(int)) size_t; typedef struct _FILE FILE; +typedef __WCHAR_TYPE__ wchar_t; int fscanf(FILE * restrict, const char * restrict, ...) ; int scanf(const char * restrict, ...) ; @@ -24,3 +25,10 @@ void test(const char *s, int *i) { scanf("%*d", i); // // expected-warning{{data argument not used by format string}} scanf("%*d%1$d", i); // no-warning } + +void bad_length_modifiers(char *s, void *p, wchar_t *ws, long double *ld) { + scanf("%hhs", "foo"); // expected-warning{{length modifier 'hh' results in undefined behavior or no effect with 's' conversion specifier}} + scanf("%1$zp", p); // expected-warning{{length modifier 'z' results in undefined behavior or no effect with 'p' conversion specifier}} + scanf("%ls", ws); // no-warning + scanf("%#.2Lf", ld); // expected-warning{{invalid conversion specifier '#'}} +} |