diff options
author | Jordy Rose <jediknil@belkadan.com> | 2012-05-14 17:58:35 +0000 |
---|---|---|
committer | Jordy Rose <jediknil@belkadan.com> | 2012-05-14 17:58:35 +0000 |
commit | 459d5f62c29ee20f5e1df1a3d92c7fde1cdb2724 (patch) | |
tree | 1a206f89a8d819a3f8025fa6cdfbefb610069a38 /clang/test/Analysis/string.c | |
parent | 77e7b8ede2b87b0be45bc034c0bdde5e299452e9 (diff) | |
download | bcm5719-llvm-459d5f62c29ee20f5e1df1a3d92c7fde1cdb2724.tar.gz bcm5719-llvm-459d5f62c29ee20f5e1df1a3d92c7fde1cdb2724.zip |
[analyzer] strncpy: Special-case a length of 0 to avoid an incorrect warning.
We check the address of the last element accessed, but with 0 calculating that
address results in element -1. This patch bails out early (and avoids a bunch
of other work at that).
Fixes PR12807.
llvm-svn: 156769
Diffstat (limited to 'clang/test/Analysis/string.c')
-rw-r--r-- | clang/test/Analysis/string.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/test/Analysis/string.c b/clang/test/Analysis/string.c index 24e29ebb02b..dc38681b35b 100644 --- a/clang/test/Analysis/string.c +++ b/clang/test/Analysis/string.c @@ -578,6 +578,17 @@ void strncpy_exactly_matching_buffer2(char *y) { (void)*(int*)0; // no-warning } +void strncpy_zero(char *src) { + char dst[] = "123"; + strncpy(dst, src, 0); // no-warning +} + +void strncpy_empty() { + char dst[] = "123"; + char src[] = ""; + strncpy(dst, src, 4); // no-warning +} + //===----------------------------------------------------------------------=== // strncat() //===----------------------------------------------------------------------=== @@ -716,6 +727,17 @@ void strncat_too_big(char *dst, char *src) { strncat(dst, src, 2); // expected-warning{{This expression will create a string whose length is too big to be represented as a size_t}} } +void strncat_zero(char *src) { + char dst[] = "123"; + strncat(dst, src, 0); // no-warning +} + +void strncat_empty() { + char dst[8] = "123"; + char src[] = ""; + strncat(dst, src, 4); // no-warning +} + //===----------------------------------------------------------------------=== // strcmp() //===----------------------------------------------------------------------=== |