[clang] 134faae - [analyzer] CStringChecker: Improve warning messages.
Artem Dergachev via cfe-commits
cfe-commits at lists.llvm.org
Wed Dec 11 11:22:44 PST 2019
Author: Artem Dergachev
Date: 2019-12-11T11:22:36-08:00
New Revision: 134faae04259b0412a067c73069f61905fc451d7
URL: https://github.com/llvm/llvm-project/commit/134faae04259b0412a067c73069f61905fc451d7
DIFF: https://github.com/llvm/llvm-project/commit/134faae04259b0412a067c73069f61905fc451d7.diff
LOG: [analyzer] CStringChecker: Improve warning messages.
Differential Revision: https://reviews.llvm.org/D71321
Added:
Modified:
clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
clang/test/Analysis/bsd-string.c
clang/test/Analysis/bstring.c
clang/test/Analysis/cstring-ranges.c
clang/test/Analysis/null-deref-path-notes.c
clang/test/Analysis/null-deref-ps-region.c
clang/test/Analysis/string.c
Removed:
################################################################################
diff --git a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
index f2c994b2a667..c05a09da3df1 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CStringChecker.cpp
@@ -290,9 +290,9 @@ ProgramStateRef CStringChecker::checkNonNull(CheckerContext &C,
SmallString<80> buf;
llvm::raw_svector_ostream OS(buf);
assert(CurrentFunctionDescription);
- OS << "Null pointer argument in call to " << CurrentFunctionDescription
- << ' ' << IdxOfArg << llvm::getOrdinalSuffix(IdxOfArg)
- << " parameter";
+ OS << "Null pointer passed as " << IdxOfArg
+ << llvm::getOrdinalSuffix(IdxOfArg) << " argument to "
+ << CurrentFunctionDescription;
emitNullArgBug(C, stateNull, S, OS.str());
}
@@ -1536,7 +1536,10 @@ void CStringChecker::evalStrcpyCommon(CheckerContext &C, const CallExpr *CE,
bool ReturnEnd, bool IsBounded,
ConcatFnKind appendK,
bool returnPtr) const {
- CurrentFunctionDescription = "string copy function";
+ if (appendK == ConcatFnKind::none)
+ CurrentFunctionDescription = "string copy function";
+ else
+ CurrentFunctionDescription = "string concatenation function";
ProgramStateRef state = C.getState();
const LocationContext *LCtx = C.getLocationContext();
diff --git a/clang/test/Analysis/bsd-string.c b/clang/test/Analysis/bsd-string.c
index d8a88836a151..3778664a8ef5 100644
--- a/clang/test/Analysis/bsd-string.c
+++ b/clang/test/Analysis/bsd-string.c
@@ -33,11 +33,11 @@ void f3() {
}
void f4() {
- strlcpy(NULL, "abcdef", 6); // expected-warning{{Null pointer argument in call to string copy function}}
+ strlcpy(NULL, "abcdef", 6); // expected-warning{{Null pointer passed as 1st argument to string copy function}}
}
void f5() {
- strlcat(NULL, "abcdef", 6); // expected-warning{{Null pointer argument in call to string copy function}}
+ strlcat(NULL, "abcdef", 6); // expected-warning{{Null pointer passed as 1st argument to string concatenation function}}
}
void f6() {
diff --git a/clang/test/Analysis/bstring.c b/clang/test/Analysis/bstring.c
index beabb0f0241e..8d8f64cebec1 100644
--- a/clang/test/Analysis/bstring.c
+++ b/clang/test/Analysis/bstring.c
@@ -148,12 +148,12 @@ void memcpy9() {
void memcpy10() {
char a[4] = {0};
- memcpy(0, a, 4); // expected-warning{{Null pointer argument in call to memory copy function}}
+ memcpy(0, a, 4); // expected-warning{{Null pointer passed as 1st argument to memory copy function}}
}
void memcpy11() {
char a[4] = {0};
- memcpy(a, 0, 4); // expected-warning{{Null pointer argument in call to memory copy function}}
+ memcpy(a, 0, 4); // expected-warning{{Null pointer passed as 2nd argument to memory copy function}}
}
void memcpy12() {
@@ -173,7 +173,7 @@ void memcpy_unknown_size (size_t n) {
void memcpy_unknown_size_warn (size_t n) {
char a[4];
- void *result = memcpy(a, 0, n); // expected-warning{{Null pointer argument in call to memory copy function}}
+ void *result = memcpy(a, 0, n); // expected-warning{{Null pointer passed as 2nd argument to memory copy function}}
clang_analyzer_eval(result == a); // no-warning (above is fatal)
}
@@ -268,12 +268,12 @@ void mempcpy9() {
void mempcpy10() {
char a[4] = {0};
- mempcpy(0, a, 4); // expected-warning{{Null pointer argument in call to memory copy function}}
+ mempcpy(0, a, 4); // expected-warning{{Null pointer passed as 1st argument to memory copy function}}
}
void mempcpy11() {
char a[4] = {0};
- mempcpy(a, 0, 4); // expected-warning{{Null pointer argument in call to memory copy function}}
+ mempcpy(a, 0, 4); // expected-warning{{Null pointer passed as 2nd argument to memory copy function}}
}
void mempcpy12() {
@@ -327,7 +327,7 @@ void mempcpy16() {
void mempcpy_unknown_size_warn (size_t n) {
char a[4];
- void *result = mempcpy(a, 0, n); // expected-warning{{Null pointer argument in call to memory copy function}}
+ void *result = mempcpy(a, 0, n); // expected-warning{{Null pointer passed as 2nd argument to memory copy function}}
clang_analyzer_eval(result == a); // no-warning (above is fatal)
}
diff --git a/clang/test/Analysis/cstring-ranges.c b/clang/test/Analysis/cstring-ranges.c
index 4fcd7eaa8bee..dc6bb67e6de5 100644
--- a/clang/test/Analysis/cstring-ranges.c
+++ b/clang/test/Analysis/cstring-ranges.c
@@ -2,6 +2,8 @@
// This test verifies argument source range highlighting.
// Otherwise we've no idea which of the arguments is null.
+// These days we actually also have it in the message,
+// but the range is still great to have.
char *strcpy(char *, const char *);
@@ -10,6 +12,6 @@ void foo() {
strcpy(a, b);
}
-// CHECK: warning: Null pointer argument in call to string copy function
+// CHECK: warning: Null pointer passed as 1st argument to string copy function
// CHECK-NEXT: strcpy(a, b);
// CHECK-NEXT: ^ ~
diff --git a/clang/test/Analysis/null-deref-path-notes.c b/clang/test/Analysis/null-deref-path-notes.c
index c73f64066b28..b1bef63390da 100644
--- a/clang/test/Analysis/null-deref-path-notes.c
+++ b/clang/test/Analysis/null-deref-path-notes.c
@@ -13,40 +13,40 @@ void *memcpy(void *dest, const void *src, unsigned long count);
void f1(char *source) {
char *destination = 0; // expected-note{{'destination' initialized to a null pointer value}}
- memcpy(destination + 0, source, 10); // expected-warning{{Null pointer argument in call to memory copy function}}
- // expected-note at -1{{Null pointer argument in call to memory copy function}}
+ memcpy(destination + 0, source, 10); // expected-warning{{Null pointer passed as 1st argument to memory copy function}}
+ // expected-note at -1{{Null pointer passed as 1st argument to memory copy function}}
}
void f2(char *source) {
char *destination = 0; // expected-note{{'destination' initialized to a null pointer value}}
- memcpy(destination - 0, source, 10); // expected-warning{{Null pointer argument in call to memory copy function}}
- // expected-note at -1{{Null pointer argument in call to memory copy function}}
+ memcpy(destination - 0, source, 10); // expected-warning{{Null pointer passed as 1st argument to memory copy function}}
+ // expected-note at -1{{Null pointer passed as 1st argument to memory copy function}}
}
void f3(char *source) {
char *destination = 0; // expected-note{{'destination' initialized to a null pointer value}}
destination = destination + 0; // expected-note{{Null pointer value stored to 'destination'}}
- memcpy(destination, source, 10); // expected-warning{{Null pointer argument in call to memory copy function}}
- // expected-note at -1{{Null pointer argument in call to memory copy function}}
+ memcpy(destination, source, 10); // expected-warning{{Null pointer passed as 1st argument to memory copy function}}
+ // expected-note at -1{{Null pointer passed as 1st argument to memory copy function}}
}
void f4(char *source) {
char *destination = 0; // expected-note{{'destination' initialized to a null pointer value}}
destination = destination - 0; // expected-note{{Null pointer value stored to 'destination'}}
- memcpy(destination, source, 10); // expected-warning{{Null pointer argument in call to memory copy function}}
- // expected-note at -1{{Null pointer argument in call to memory copy function}}
+ memcpy(destination, source, 10); // expected-warning{{Null pointer passed as 1st argument to memory copy function}}
+ // expected-note at -1{{Null pointer passed as 1st argument to memory copy function}}
}
void f5(char *source) {
char *destination1 = 0; // expected-note{{'destination1' initialized to a null pointer value}}
char *destination2 = destination1 + 0; // expected-note{{'destination2' initialized to a null pointer value}}
- memcpy(destination2, source, 10); // expected-warning{{Null pointer argument in call to memory copy function}}
- // expected-note at -1{{Null pointer argument in call to memory copy function}}
+ memcpy(destination2, source, 10); // expected-warning{{Null pointer passed as 1st argument to memory copy function}}
+ // expected-note at -1{{Null pointer passed as 1st argument to memory copy function}}
}
void f6(char *source) {
char *destination1 = 0; // expected-note{{'destination1' initialized to a null pointer value}}
char *destination2 = destination1 - 0; // expected-note{{'destination2' initialized to a null pointer value}}
- memcpy(destination2, source, 10); // expected-warning{{Null pointer argument in call to memory copy function}}
- // expected-note at -1{{Null pointer argument in call to memory copy function}}
+ memcpy(destination2, source, 10); // expected-warning{{Null pointer passed as 1st argument to memory copy function}}
+ // expected-note at -1{{Null pointer passed as 1st argument to memory copy function}}
}
diff --git a/clang/test/Analysis/null-deref-ps-region.c b/clang/test/Analysis/null-deref-ps-region.c
index 71b7a1ddb050..58fcbb65f151 100644
--- a/clang/test/Analysis/null-deref-ps-region.c
+++ b/clang/test/Analysis/null-deref-ps-region.c
@@ -39,7 +39,7 @@ void bar() {
void testConcreteNull() {
int *x = 0;
- memset(x, 0, 1); // expected-warning {{Null pointer argument in call to memory set function}}
+ memset(x, 0, 1); // expected-warning {{Null pointer passed as 1st argument to memory set function}}
}
void testStackArray() {
diff --git a/clang/test/Analysis/string.c b/clang/test/Analysis/string.c
index 841bc157ab57..d21ec11c1115 100644
--- a/clang/test/Analysis/string.c
+++ b/clang/test/Analysis/string.c
@@ -97,7 +97,7 @@ void strlen_constant2(char x) {
}
size_t strlen_null() {
- return strlen(0); // expected-warning{{Null pointer argument in call to string length function}}
+ return strlen(0); // expected-warning{{Null pointer passed as 1st argument to string length function}}
}
size_t strlen_fn() {
@@ -251,7 +251,7 @@ void strnlen_constant6(char x) {
}
size_t strnlen_null() {
- return strnlen(0, 3); // expected-warning{{Null pointer argument in call to string length function}}
+ return strnlen(0, 3); // expected-warning{{Null pointer passed as 1st argument to string length function}}
}
size_t strnlen_fn() {
@@ -322,11 +322,11 @@ char *strcpy(char *restrict s1, const char *restrict s2);
void strcpy_null_dst(char *x) {
- strcpy(NULL, x); // expected-warning{{Null pointer argument in call to string copy function}}
+ strcpy(NULL, x); // expected-warning{{Null pointer passed as 1st argument to string copy function}}
}
void strcpy_null_src(char *x) {
- strcpy(x, NULL); // expected-warning{{Null pointer argument in call to string copy function}}
+ strcpy(x, NULL); // expected-warning{{Null pointer passed as 2nd argument to string copy function}}
}
void strcpy_fn(char *x) {
@@ -424,15 +424,15 @@ char *strcat(char *restrict s1, const char *restrict s2);
void strcat_null_dst(char *x) {
- strcat(NULL, x); // expected-warning{{Null pointer argument in call to string copy function}}
+ strcat(NULL, x); // expected-warning{{Null pointer passed as 1st argument to string concatenation function}}
}
void strcat_null_src(char *x) {
- strcat(x, NULL); // expected-warning{{Null pointer argument in call to string copy function}}
+ strcat(x, NULL); // expected-warning{{Null pointer passed as 2nd argument to string concatenation function}}
}
void strcat_fn(char *x) {
- strcat(x, (char*)&strcat_fn); // expected-warning{{Argument to string copy function is the address of the function 'strcat_fn', which is not a null-terminated string}}
+ strcat(x, (char*)&strcat_fn); // expected-warning{{Argument to string concatenation function is the address of the function 'strcat_fn', which is not a null-terminated string}}
}
void strcat_effects(char *y) {
@@ -523,11 +523,11 @@ char *strncpy(char *restrict s1, const char *restrict s2, size_t n);
void strncpy_null_dst(char *x) {
- strncpy(NULL, x, 5); // expected-warning{{Null pointer argument in call to string copy function}}
+ strncpy(NULL, x, 5); // expected-warning{{Null pointer passed as 1st argument to string copy function}}
}
void strncpy_null_src(char *x) {
- strncpy(x, NULL, 5); // expected-warning{{Null pointer argument in call to string copy function}}
+ strncpy(x, NULL, 5); // expected-warning{{Null pointer passed as 2nd argument to string copy function}}
}
void strncpy_fn(char *x) {
@@ -631,15 +631,15 @@ char *strncat(char *restrict s1, const char *restrict s2, size_t n);
void strncat_null_dst(char *x) {
- strncat(NULL, x, 4); // expected-warning{{Null pointer argument in call to string copy function}}
+ strncat(NULL, x, 4); // expected-warning{{Null pointer passed as 1st argument to string concatenation function}}
}
void strncat_null_src(char *x) {
- strncat(x, NULL, 4); // expected-warning{{Null pointer argument in call to string copy function}}
+ strncat(x, NULL, 4); // expected-warning{{Null pointer passed as 2nd argument to string concatenation function}}
}
void strncat_fn(char *x) {
- strncat(x, (char*)&strncat_fn, 4); // expected-warning{{Argument to string copy function is the address of the function 'strncat_fn', which is not a null-terminated string}}
+ strncat(x, (char*)&strncat_fn, 4); // expected-warning{{Argument to string concatenation function is the address of the function 'strncat_fn', which is not a null-terminated string}}
}
void strncat_effects(char *y) {
@@ -812,13 +812,13 @@ void strcmp_2() {
void strcmp_null_0() {
char *x = NULL;
char *y = "123";
- strcmp(x, y); // expected-warning{{Null pointer argument in call to string comparison function}}
+ strcmp(x, y); // expected-warning{{Null pointer passed as 1st argument to string comparison function}}
}
void strcmp_null_1() {
char *x = "123";
char *y = NULL;
- strcmp(x, y); // expected-warning{{Null pointer argument in call to string comparison function}}
+ strcmp(x, y); // expected-warning{{Null pointer passed as 2nd argument to string comparison function}}
}
void strcmp_
diff _length_0() {
@@ -921,13 +921,13 @@ void strncmp_2() {
void strncmp_null_0() {
char *x = NULL;
char *y = "123";
- strncmp(x, y, 3); // expected-warning{{Null pointer argument in call to string comparison function}}
+ strncmp(x, y, 3); // expected-warning{{Null pointer passed as 1st argument to string comparison function}}
}
void strncmp_null_1() {
char *x = "123";
char *y = NULL;
- strncmp(x, y, 3); // expected-warning{{Null pointer argument in call to string comparison function}}
+ strncmp(x, y, 3); // expected-warning{{Null pointer passed as 2nd argument to string comparison function}}
}
void strncmp_
diff _length_0() {
@@ -1030,13 +1030,13 @@ void strcasecmp_2() {
void strcasecmp_null_0() {
char *x = NULL;
char *y = "123";
- strcasecmp(x, y); // expected-warning{{Null pointer argument in call to string comparison function}}
+ strcasecmp(x, y); // expected-warning{{Null pointer passed as 1st argument to string comparison function}}
}
void strcasecmp_null_1() {
char *x = "123";
char *y = NULL;
- strcasecmp(x, y); // expected-warning{{Null pointer argument in call to string comparison function}}
+ strcasecmp(x, y); // expected-warning{{Null pointer passed as 2nd argument to string comparison function}}
}
void strcasecmp_
diff _length_0() {
@@ -1121,13 +1121,13 @@ void strncasecmp_2() {
void strncasecmp_null_0() {
char *x = NULL;
char *y = "123";
- strncasecmp(x, y, 3); // expected-warning{{Null pointer argument in call to string comparison function}}
+ strncasecmp(x, y, 3); // expected-warning{{Null pointer passed as 1st argument to string comparison function}}
}
void strncasecmp_null_1() {
char *x = "123";
char *y = NULL;
- strncasecmp(x, y, 3); // expected-warning{{Null pointer argument in call to string comparison function}}
+ strncasecmp(x, y, 3); // expected-warning{{Null pointer passed as 2nd argument to string comparison function}}
}
void strncasecmp_
diff _length_0() {
@@ -1183,11 +1183,11 @@ void strncasecmp_embedded_null () {
char *strsep(char **stringp, const char *delim);
void strsep_null_delim(char *s) {
- strsep(&s, NULL); // expected-warning{{Null pointer argument in call to strsep()}}
+ strsep(&s, NULL); // expected-warning{{Null pointer passed as 2nd argument to strsep()}}
}
void strsep_null_search() {
- strsep(NULL, ""); // expected-warning{{Null pointer argument in call to strsep()}}
+ strsep(NULL, ""); // expected-warning{{Null pointer passed as 1st argument to strsep()}}
}
void strsep_return_original_pointer(char *s) {
@@ -1433,7 +1433,7 @@ void memset26_upper_UCHAR_MAX() {
void bzero1_null() {
char *a = NULL;
- bzero(a, 10); // expected-warning{{Null pointer argument in call to memory clearance function}}
+ bzero(a, 10); // expected-warning{{Null pointer passed as 1st argument to memory clearance function}}
}
void bzero2_char_array_null() {
@@ -1453,7 +1453,7 @@ void bzero3_char_ptr_null() {
void explicit_bzero1_null() {
char *a = NULL;
- explicit_bzero(a, 10); // expected-warning{{Null pointer argument in call to memory clearance function}}
+ explicit_bzero(a, 10); // expected-warning{{Null pointer passed as 1st argument to memory clearance function}}
}
void explicit_bzero2_clear_mypassword() {
More information about the cfe-commits
mailing list