forked from OSchip/llvm-project
Removing strncpy() checking in CString checker for now. Some significant changes need to be made to properly support modeling of it since it potentially leaves strings non-null terminated.
llvm-svn: 130758
This commit is contained in:
parent
85ac42339c
commit
5066858bcd
|
@ -1241,7 +1241,7 @@ bool CStringChecker::evalCall(const CallExpr *CE, CheckerContext &C) const {
|
|||
.Cases("memcmp", "bcmp", &CStringChecker::evalMemcmp)
|
||||
.Cases("memmove", "__memmove_chk", &CStringChecker::evalMemmove)
|
||||
.Cases("strcpy", "__strcpy_chk", &CStringChecker::evalStrcpy)
|
||||
.Cases("strncpy", "__strncpy_chk", &CStringChecker::evalStrncpy)
|
||||
//.Cases("strncpy", "__strncpy_chk", &CStringChecker::evalStrncpy)
|
||||
.Cases("stpcpy", "__stpcpy_chk", &CStringChecker::evalStpcpy)
|
||||
.Cases("strcat", "__strcat_chk", &CStringChecker::evalStrcat)
|
||||
.Cases("strncat", "__strncat_chk", &CStringChecker::evalStrncat)
|
||||
|
|
|
@ -327,74 +327,6 @@ void strcpy_no_overflow(char *y) {
|
|||
strcpy(x, y); // no-warning
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===
|
||||
// strncpy()
|
||||
//===----------------------------------------------------------------------===
|
||||
|
||||
#ifdef VARIANT
|
||||
|
||||
#define __strncpy_chk BUILTIN(__strncpy_chk)
|
||||
char *__strncpy_chk(char *restrict s1, const char *restrict s2, size_t n, size_t destlen);
|
||||
|
||||
#define strncpy(a,b,c) __strncpy_chk(a,b,c, (size_t)-1)
|
||||
|
||||
#else /* VARIANT */
|
||||
|
||||
#define strncpy BUILTIN(strncpy)
|
||||
char *strncpy(char *restrict s1, const char *restrict s2, size_t n);
|
||||
|
||||
#endif /* VARIANT */
|
||||
|
||||
|
||||
void strncpy_null_dst(char *x) {
|
||||
strncpy(NULL, x, 1); // expected-warning{{Null pointer argument in call to byte string function}}
|
||||
}
|
||||
|
||||
void strncpy_null_src(char *x) {
|
||||
strncpy(x, NULL, 1); // expected-warning{{Null pointer argument in call to byte string function}}
|
||||
}
|
||||
|
||||
void strncpy_fn(char *x) {
|
||||
strncpy(x, (char*)&strncpy_fn, 1); // expected-warning{{Argument to byte string function is the address of the function 'strncpy_fn', which is not a null-terminated string}}
|
||||
}
|
||||
|
||||
void strncpy_effects(char *x, char *y) {
|
||||
char a = x[0];
|
||||
|
||||
if (strncpy(x, y, strlen(y)) != x)
|
||||
(void)*(char*)0; // no-warning
|
||||
|
||||
if (strlen(x) != strlen(y))
|
||||
(void)*(char*)0; // no-warning
|
||||
|
||||
if (a != x[0])
|
||||
(void)*(char*)0; // expected-warning{{null}}
|
||||
}
|
||||
|
||||
void strncpy_overflow(char *y) {
|
||||
char x[4];
|
||||
if (strlen(y) == 4)
|
||||
strncpy(x, y, strlen(y)); // expected-warning{{Byte string function overflows destination buffer}}
|
||||
}
|
||||
|
||||
void strncpy_len_overflow(char *y) {
|
||||
char x[4];
|
||||
if (strlen(y) == 3)
|
||||
strncpy(x, y, sizeof(x)); // no-warning
|
||||
}
|
||||
|
||||
void strncpy_no_overflow(char *y) {
|
||||
char x[4];
|
||||
if (strlen(y) == 3)
|
||||
strncpy(x, y, strlen(y)); // no-warning
|
||||
}
|
||||
|
||||
void strncpy_no_len_overflow(char *y) {
|
||||
char x[4];
|
||||
if (strlen(y) == 4)
|
||||
strncpy(x, y, sizeof(x)-1); // no-warning
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===
|
||||
// stpcpy()
|
||||
//===----------------------------------------------------------------------===
|
||||
|
|
Loading…
Reference in New Issue