diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2016-03-29 17:35:02 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2016-03-29 17:35:02 +0000 |
commit | 0c18d03d9157090cb379219a8b91f3104869f358 (patch) | |
tree | 4691c44c47d7b0f79928619e73b170efb9047c65 /clang/test/Sema/format-strings-scanf.c | |
parent | ac400900da8e0f756a73739a85151b01e42500ea (diff) | |
download | bcm5719-llvm-0c18d03d9157090cb379219a8b91f3104869f358.tar.gz bcm5719-llvm-0c18d03d9157090cb379219a8b91f3104869f358.zip |
[Sema] Handle UTF-8 invalid format string specifiers
Improve invalid format string specifier handling by printing out
invalid specifiers characters with \x, \u and \U. Previously clang
would print gargabe whenever the character is unprintable.
Example, before:
NSLog(@"%\u25B9"); => warning: invalid conversion specifier ' [-Wformat-invalid-specifier]
after:
NSLog(@"%\u25B9"); => warning: invalid conversion specifier '\u25b9' [-Wformat-invalid-specifier]
Differential Revision: http://reviews.llvm.org/D18296
rdar://problem/24672159
llvm-svn: 264752
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 7a92842b245..ee2be0e6466 100644 --- a/clang/test/Sema/format-strings-scanf.c +++ b/clang/test/Sema/format-strings-scanf.c @@ -183,3 +183,11 @@ void check_conditional_literal(char *s, int *i) { scanf(i ? "%d" : "%d", i, s); // expected-warning{{data argument not used}} scanf(i ? "%s" : "%d", s); // expected-warning{{format specifies type 'int *'}} } + +void testInvalidNoPrintable(int *a) { + scanf("%\u25B9", a); // expected-warning {{invalid conversion specifier '\u25b9'}} + scanf("%\xE2\x96\xB9", a); // expected-warning {{invalid conversion specifier '\u25b9'}} + scanf("%\U00010348", a); // expected-warning {{invalid conversion specifier '\U00010348'}} + scanf("%\xF0\x90\x8D\x88", a); // expected-warning {{invalid conversion specifier '\U00010348'}} + scanf("%\xe2", a); // expected-warning {{invalid conversion specifier '\xe2'}} +} |