Clarify null pointer arithmetic message
This commit is contained in:
parent
47ba7abf0b
commit
7dfbe7389b
|
@ -559,20 +559,28 @@ void CheckNullPointer::arithmetic()
|
||||||
|
|
||||||
void CheckNullPointer::arithmeticError(const Token *tok, const ValueFlow::Value *value)
|
void CheckNullPointer::arithmeticError(const Token *tok, const ValueFlow::Value *value)
|
||||||
{
|
{
|
||||||
|
std::string arithmetic;
|
||||||
|
if (tok && tok->str()[0] == '-')
|
||||||
|
arithmetic = "subtraction";
|
||||||
|
else if (tok && tok->str()[0] == '+')
|
||||||
|
arithmetic = "addition";
|
||||||
|
else
|
||||||
|
arithmetic = "arithmetic";
|
||||||
|
|
||||||
std::string errmsg;
|
std::string errmsg;
|
||||||
if (tok && tok->str().front() == '-') {
|
if (tok && tok->str()[0] == '-') {
|
||||||
if (value && value->condition)
|
if (value && value->condition)
|
||||||
errmsg = ValueFlow::eitherTheConditionIsRedundant(value->condition) + " or there is overflow in pointer subtraction.";
|
errmsg = ValueFlow::eitherTheConditionIsRedundant(value->condition) + " or there is overflow in pointer " + arithmetic + ".";
|
||||||
else
|
else
|
||||||
errmsg = "Overflow in pointer arithmetic, NULL pointer is subtracted.";
|
errmsg = "Overflow in pointer arithmetic, NULL pointer is subtracted.";
|
||||||
} else {
|
} else {
|
||||||
if (value && value->condition)
|
if (value && value->condition)
|
||||||
errmsg = ValueFlow::eitherTheConditionIsRedundant(value->condition) + " or there is pointer arithmetic with NULL pointer.";
|
errmsg = ValueFlow::eitherTheConditionIsRedundant(value->condition) + " or there is pointer arithmetic with NULL pointer.";
|
||||||
else
|
else
|
||||||
errmsg = "Pointer arithmetic with NULL pointer.";
|
errmsg = "Pointer " + arithmetic + " with NULL pointer.";
|
||||||
}
|
}
|
||||||
|
|
||||||
const ErrorPath errorPath = getErrorPath(tok, value, tok && tok->str()[0] == '-' ? "Null pointer subtraction" : "Null pointer arithmetic");
|
const ErrorPath errorPath = getErrorPath(tok, value, "Null pointer " + arithmetic);
|
||||||
|
|
||||||
reportError(errorPath,
|
reportError(errorPath,
|
||||||
(value && value->condition) ? Severity::warning : Severity::error,
|
(value && value->condition) ? Severity::warning : Severity::error,
|
||||||
|
|
|
@ -2612,7 +2612,7 @@ private:
|
||||||
" char * p = s + 20;\n"
|
" char * p = s + 20;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"void bar() { foo(0); }\n");
|
"void bar() { foo(0); }\n");
|
||||||
ASSERT_EQUALS("[test.cpp:2]: (error) Pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2]: (error) Pointer addition with NULL pointer.\n", errout.str());
|
||||||
|
|
||||||
check("void foo(char *s) {\n"
|
check("void foo(char *s) {\n"
|
||||||
" if (!s) {}\n"
|
" if (!s) {}\n"
|
||||||
|
@ -2624,7 +2624,7 @@ private:
|
||||||
" char * p = 20 + s;\n"
|
" char * p = 20 + s;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"void bar() { foo(0); }\n");
|
"void bar() { foo(0); }\n");
|
||||||
ASSERT_EQUALS("[test.cpp:2]: (error) Pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2]: (error) Pointer addition with NULL pointer.\n", errout.str());
|
||||||
|
|
||||||
check("void foo(char *s) {\n"
|
check("void foo(char *s) {\n"
|
||||||
" if (!s) {}\n"
|
" if (!s) {}\n"
|
||||||
|
@ -2636,7 +2636,7 @@ private:
|
||||||
" s += 20;\n"
|
" s += 20;\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
"void bar() { foo(0); }\n");
|
"void bar() { foo(0); }\n");
|
||||||
ASSERT_EQUALS("[test.cpp:2]: (error) Pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2]: (error) Pointer addition with NULL pointer.\n", errout.str());
|
||||||
|
|
||||||
check("void foo(char *s) {\n"
|
check("void foo(char *s) {\n"
|
||||||
" if (!s) {}\n"
|
" if (!s) {}\n"
|
||||||
|
@ -2645,10 +2645,10 @@ private:
|
||||||
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:3]: (warning) Either the condition '!s' is redundant or there is pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2] -> [test.cpp:3]: (warning) Either the condition '!s' is redundant or there is pointer arithmetic with NULL pointer.\n", errout.str());
|
||||||
|
|
||||||
check("int* f7() { int *x = NULL; return ++x; }");
|
check("int* f7() { int *x = NULL; return ++x; }");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:1]: (error) Pointer addition with NULL pointer.\n", errout.str());
|
||||||
|
|
||||||
check("int* f10() { int *x = NULL; return x++; } ");
|
check("int* f10() { int *x = NULL; return x++; } ");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Pointer arithmetic with NULL pointer.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:1]: (error) Pointer addition with NULL pointer.\n", errout.str());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue