diff options
| author | Artem Dergachev <artem.dergachev@gmail.com> | 2018-05-14 22:32:24 +0000 |
|---|---|---|
| committer | Artem Dergachev <artem.dergachev@gmail.com> | 2018-05-14 22:32:24 +0000 |
| commit | c19843714c5a8bbd9d28302daf8364c0a7ff12f9 (patch) | |
| tree | 9333d3bd9b7337f947e535b3ff6f37548f8bf480 /clang/test | |
| parent | de577af8c0617df6bb707ac0a7ebccbf77d7cb6e (diff) | |
| download | bcm5719-llvm-c19843714c5a8bbd9d28302daf8364c0a7ff12f9.tar.gz bcm5719-llvm-c19843714c5a8bbd9d28302daf8364c0a7ff12f9.zip | |
[analyzer] Re-apply r331096 "CStringChecker: Add support for BSD strlcpy()...".
Fixed after revert in r331401.
Patch by David Carlier!
Differential Revision: https://reviews.llvm.org/D45177
llvm-svn: 332303
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/Analysis/bsd-string.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/clang/test/Analysis/bsd-string.c b/clang/test/Analysis/bsd-string.c new file mode 100644 index 00000000000..4c57c86f174 --- /dev/null +++ b/clang/test/Analysis/bsd-string.c @@ -0,0 +1,40 @@ +// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix.cstring,alpha.unix.cstring,debug.ExprInspection -analyzer-store=region -verify %s + +#define NULL ((void *)0) + +typedef __typeof(sizeof(int)) size_t; +size_t strlcpy(char *dst, const char *src, size_t n); +size_t strlcat(char *dst, const char *src, size_t n); +void clang_analyzer_eval(int); + +void f1() { + char overlap[] = "123456789"; + strlcpy(overlap, overlap + 1, 3); // expected-warning{{Arguments must not be overlapping buffers}} +} + +void f2() { + char buf[5]; + strlcpy(buf, "abcd", sizeof(buf)); // expected-no-warning + strlcat(buf, "efgh", sizeof(buf)); // expected-warning{{Size argument is greater than the free space in the destination buffer}} +} + +void f3() { + char dst[2]; + const char *src = "abdef"; + strlcpy(dst, src, 5); // expected-warning{{Size argument is greater than the length of the destination buffer}} +} + +void f4() { + strlcpy(NULL, "abcdef", 6); // expected-warning{{Null pointer argument in call to string copy function}} +} + +void f5() { + strlcat(NULL, "abcdef", 6); // expected-warning{{Null pointer argument in call to string copy function}} +} + +void f6() { + char buf[8]; + strlcpy(buf, "abc", 3); + size_t len = strlcat(buf, "defg", 4); + clang_analyzer_eval(len == 7); // expected-warning{{TRUE}} +} |

