CheckNullPointer: Update std.cfg and test that updates are correct
This commit is contained in:
parent
6e6de82323
commit
b8b573321e
28
cfg/std.cfg
28
cfg/std.cfg
|
@ -36,21 +36,21 @@
|
||||||
<function name="memmove"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/></arg> <arg nr="2"><not-null/><not-uninit/></arg> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
<function name="memmove"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/></arg> <arg nr="2"><not-null/><not-uninit/></arg> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
||||||
<function name="memset"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/></arg> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
<function name="memset"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/></arg> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
||||||
|
|
||||||
<function name="strcat"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
<function name="strcat"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="2"><not-null/><not-uninit/></arg> </function>
|
||||||
<function name="strchr"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
<function name="strchr"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> </function>
|
||||||
<function name="strcpy"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
<function name="strcpy"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/></arg> <arg nr="2"><not-null/><not-uninit/></arg> </function>
|
||||||
<function name="strcmp"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
<function name="strcmp"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="2"><not-null/><not-uninit/></arg> </function>
|
||||||
<function name="strdup"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
<function name="strdup"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> </function>
|
||||||
<function name="strlen"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
<function name="strlen"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> </function>
|
||||||
<function name="strncat"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
<function name="strncat"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="2"><not-null/><not-uninit/></arg> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
||||||
<function name="strncpy"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
<function name="strncpy"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/></arg> <arg nr="2"><not-null/><not-uninit/></arg> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
||||||
<function name="strncmp"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
<function name="strncmp"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="2"><not-null/><not-uninit/></arg> <arg nr="3"><not-bool/><valid>0-</valid></arg> </function>
|
||||||
<function name="strstr"> <noreturn>false</noreturn> <leak-ignore/> </function>
|
<function name="strstr"> <noreturn>false</noreturn> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="2"><not-null/><not-uninit/></arg> </function>
|
||||||
|
|
||||||
<function name="strtol"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
<function name="strtol"> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
||||||
<function name="strtoll"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
<function name="strtoll"> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
||||||
<function name="strtoul"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
<function name="strtoul"> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
||||||
<function name="strtoull"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
<function name="strtoull"> <leak-ignore/> <arg nr="1"><not-null/><not-uninit/></arg> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
||||||
<function name="wcstol"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
<function name="wcstol"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
||||||
<function name="wcstoll"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
<function name="wcstoll"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
||||||
<function name="wcstoul"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
<function name="wcstoul"> <leak-ignore/> <arg nr="3"><valid>0,2-36</valid></arg> </function>
|
||||||
|
|
|
@ -77,6 +77,9 @@ private:
|
||||||
TEST_CASE(crash1);
|
TEST_CASE(crash1);
|
||||||
TEST_CASE(functioncallDefaultArguments);
|
TEST_CASE(functioncallDefaultArguments);
|
||||||
TEST_CASE(nullpointer_internal_error); // #5080
|
TEST_CASE(nullpointer_internal_error); // #5080
|
||||||
|
|
||||||
|
// Test that std.cfg is configured correctly
|
||||||
|
TEST_CASE(stdcfg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void check(const char code[], bool inconclusive = false, const char filename[] = "test.cpp", bool verify=true) {
|
void check(const char code[], bool inconclusive = false, const char filename[] = "test.cpp", bool verify=true) {
|
||||||
|
@ -86,14 +89,9 @@ private:
|
||||||
Settings settings;
|
Settings settings;
|
||||||
settings.addEnabled("warning");
|
settings.addEnabled("warning");
|
||||||
settings.inconclusive = inconclusive;
|
settings.inconclusive = inconclusive;
|
||||||
|
_lib = Library();
|
||||||
// cfg
|
LOAD_LIB("std.cfg");
|
||||||
const char cfg[] = "<?xml version=\"1.0\"?>\n"
|
settings.library = _lib;
|
||||||
"<def>\n"
|
|
||||||
" <function name=\"memcmp\"> <arg nr=\"1\"><not-null/></arg> <arg nr=\"2\"><not-null/></arg> </function>\n"
|
|
||||||
" <function name=\"strcpy\"> <arg nr=\"1\"><not-null/></arg> <arg nr=\"2\"><not-null/></arg> </function>\n"
|
|
||||||
"</def>";
|
|
||||||
settings.library.loadxmldata(cfg, sizeof(cfg));
|
|
||||||
|
|
||||||
// Tokenize..
|
// Tokenize..
|
||||||
Tokenizer tokenizer(&settings, this);
|
Tokenizer tokenizer(&settings, this);
|
||||||
|
@ -2391,6 +2389,54 @@ private:
|
||||||
"}\n");
|
"}\n");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test that std.cfg is configured correctly
|
||||||
|
void stdcfg() {
|
||||||
|
const char errp[] = "[test.cpp:1] -> [test.cpp:1]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n";
|
||||||
|
const char errpq[] = "[test.cpp:1] -> [test.cpp:1]: (warning) Possible null pointer dereference: p - otherwise it is redundant to check it against null.\n"
|
||||||
|
"[test.cpp:1] -> [test.cpp:1]: (warning) Possible null pointer dereference: q - otherwise it is redundant to check it against null.\n";
|
||||||
|
|
||||||
|
// str..
|
||||||
|
check("void f(char*p){ strchr (p,c);if(!p){}}");
|
||||||
|
ASSERT_EQUALS(errp,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p){ strdup (p);if(!p){}}");
|
||||||
|
ASSERT_EQUALS(errp,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p){ strlen (p);if(!p){}}");
|
||||||
|
ASSERT_EQUALS(errp,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strcpy (p,q);if(!p||!q){}}");
|
||||||
|
ASSERT_EQUALS(errpq,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strcat (p,q);if(!p||!q){}}");
|
||||||
|
ASSERT_EQUALS(errpq,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strcmp (p,q);if(!p||!q){}}");
|
||||||
|
ASSERT_EQUALS(errpq,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strncpy (p,q,1);if(!p||!q){}}");
|
||||||
|
ASSERT_EQUALS(errpq,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strncat (p,q,1);if(!p||!q){}}");
|
||||||
|
ASSERT_EQUALS(errpq,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strncmp (p,q,1);if(!p||!q){}}");
|
||||||
|
ASSERT_EQUALS(errpq,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strstr (p,q);if(!p||!q){}}");
|
||||||
|
ASSERT_EQUALS(errpq,errout.str());
|
||||||
|
|
||||||
|
// strtol etc
|
||||||
|
check("void f(char*p,char*q){ strtoul (p,q,0);if(!p){}}");
|
||||||
|
ASSERT_EQUALS(errp,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strtoull (p,q,0);if(!p){}}");
|
||||||
|
ASSERT_EQUALS(errp,errout.str());
|
||||||
|
|
||||||
|
check("void f(char*p,char*q){ strtol (p,q,0);if(!p){}}");
|
||||||
|
ASSERT_EQUALS(errp,errout.str());
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TEST(TestNullPointer)
|
REGISTER_TEST(TestNullPointer)
|
||||||
|
|
Loading…
Reference in New Issue