summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis/string.c
diff options
context:
space:
mode:
authorJordy Rose <jediknil@belkadan.com>2012-05-14 17:58:35 +0000
committerJordy Rose <jediknil@belkadan.com>2012-05-14 17:58:35 +0000
commit459d5f62c29ee20f5e1df1a3d92c7fde1cdb2724 (patch)
tree1a206f89a8d819a3f8025fa6cdfbefb610069a38 /clang/test/Analysis/string.c
parent77e7b8ede2b87b0be45bc034c0bdde5e299452e9 (diff)
downloadbcm5719-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.c22
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()
//===----------------------------------------------------------------------===
OpenPOWER on IntegriCloud