better message for strncpy zero-terminated check
This commit is contained in:
parent
a1aa66f370
commit
d643397a7e
|
@ -157,7 +157,13 @@ void CheckBufferOverrun::sizeArgumentAsCharError(const Token *tok)
|
|||
|
||||
void CheckBufferOverrun::terminateStrncpyError(const Token *tok, const std::string &varname)
|
||||
{
|
||||
reportError(tok, Severity::warning, "terminateStrncpy", "After a strncpy() the buffer '" + varname + "' should be zero-terminated");
|
||||
reportError(tok, Severity::warning, "terminateStrncpy",
|
||||
"The buffer '" + varname + "' may not be zero-terminated after the call to strncpy().\n"
|
||||
"The use of strncpy() usually indicates that the programmer wants to ensure "
|
||||
"the buffer is zero-terminated after the call. However if the (buffer) size given for "
|
||||
"the strncpy() call matches the actual buffer size strncpy() does not add the "
|
||||
"zero at the end of the buffer. This may cause bugs later in the code if "
|
||||
"the code assumes buffer is zero-terminated.");
|
||||
}
|
||||
|
||||
void CheckBufferOverrun::cmdLineArgsError(const Token *tok)
|
||||
|
|
|
@ -2794,7 +2794,7 @@ private:
|
|||
" strncpy(baz, bar, sizeof(baz));\n"
|
||||
" bar[99] = 0;\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) After a strncpy() the buffer 'baz' should be zero-terminated\n", errout.str());
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) The buffer 'baz' may not be zero-terminated after the call to strncpy().\n", errout.str());
|
||||
|
||||
// Test with invalid code that there is no segfault
|
||||
check("char baz[100];\n"
|
||||
|
@ -2809,7 +2809,7 @@ private:
|
|||
" foo(baz);\n"
|
||||
" foo(baz);\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) After a strncpy() the buffer 'baz' should be zero-terminated\n", errout.str());
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) The buffer 'baz' may not be zero-terminated after the call to strncpy().\n", errout.str());
|
||||
}
|
||||
|
||||
void terminateStrncpy2()
|
||||
|
@ -2821,7 +2821,7 @@ private:
|
|||
" bar[99] = 0;\n"
|
||||
" return baz;\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) After a strncpy() the buffer 'baz' should be zero-terminated\n", errout.str());
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) The buffer 'baz' may not be zero-terminated after the call to strncpy().\n", errout.str());
|
||||
}
|
||||
|
||||
void terminateStrncpy3()
|
||||
|
@ -2837,7 +2837,7 @@ private:
|
|||
"void bar(char *p) {\n"
|
||||
" strncpy(p, str, 100);\n"
|
||||
"}\n", false);
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) After a strncpy() the buffer 'str' should be zero-terminated\n", errout.str());
|
||||
ASSERT_EQUALS("[test.cpp:4]: (warning) The buffer 'str' may not be zero-terminated after the call to strncpy().\n", errout.str());
|
||||
}
|
||||
|
||||
void recursive_long_time()
|
||||
|
|
Loading…
Reference in New Issue