testbufferoverrun; test case cleanup, ensure there is not uninitialized reads etc
This commit is contained in:
parent
e66427c395
commit
26e9525683
|
@ -39,12 +39,11 @@ public:
|
||||||
private:
|
private:
|
||||||
Settings settings0;
|
Settings settings0;
|
||||||
|
|
||||||
void check(const char code[], bool experimental = true, const char filename[] = "test.cpp") {
|
void check(const char code[], const char filename[] = "test.cpp") {
|
||||||
// Clear the error buffer..
|
// Clear the error buffer..
|
||||||
errout.str("");
|
errout.str("");
|
||||||
|
|
||||||
settings0.certainty.enable(Certainty::inconclusive);
|
settings0.certainty.enable(Certainty::inconclusive);
|
||||||
settings0.certainty.setEnabled(Certainty::experimental, experimental);
|
|
||||||
|
|
||||||
// Tokenize..
|
// Tokenize..
|
||||||
Tokenizer tokenizer(&settings0, this);
|
Tokenizer tokenizer(&settings0, this);
|
||||||
|
@ -341,7 +340,7 @@ private:
|
||||||
void array_index_1() {
|
void array_index_1() {
|
||||||
check("void f()\n"
|
check("void f()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" char str[0x10];\n"
|
" char str[0x10] = {0};\n"
|
||||||
" str[15] = 0;\n"
|
" str[15] = 0;\n"
|
||||||
" str[16] = 0;\n"
|
" str[16] = 0;\n"
|
||||||
"}");
|
"}");
|
||||||
|
@ -349,7 +348,7 @@ private:
|
||||||
|
|
||||||
check("char f()\n"
|
check("char f()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" char str[16];\n"
|
" char str[16] = {0};\n"
|
||||||
" return str[16];\n"
|
" return str[16];\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (error) Array 'str[16]' accessed at index 16, which is out of bounds.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (error) Array 'str[16]' accessed at index 16, which is out of bounds.\n", errout.str());
|
||||||
|
@ -373,11 +372,11 @@ private:
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("int x[5];\n"
|
check("int x[5] = {0};\n"
|
||||||
"int a = x[10];");
|
"int a = x[10];");
|
||||||
ASSERT_EQUALS("[test.cpp:2]: (error) Array 'x[5]' accessed at index 10, which is out of bounds.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2]: (error) Array 'x[5]' accessed at index 10, which is out of bounds.\n", errout.str());
|
||||||
|
|
||||||
check("int x[5];\n"
|
check("int x[5] = {0};\n"
|
||||||
"int a = (x)[10];");
|
"int a = (x)[10];");
|
||||||
ASSERT_EQUALS("[test.cpp:2]: (error) Array 'x[5]' accessed at index 10, which is out of bounds.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:2]: (error) Array 'x[5]' accessed at index 10, which is out of bounds.\n", errout.str());
|
||||||
}
|
}
|
||||||
|
@ -641,12 +640,11 @@ private:
|
||||||
"public:\n"
|
"public:\n"
|
||||||
" ABC();\n"
|
" ABC();\n"
|
||||||
" char *str[10];\n"
|
" char *str[10];\n"
|
||||||
" struct ABC *next();"
|
" struct ABC *next();\n"
|
||||||
"};\n"
|
"};\n"
|
||||||
"\n"
|
"\n"
|
||||||
"static void f()\n"
|
"static void f(ABC *abc1)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" ABC *abc1;\n"
|
|
||||||
" for ( ABC *abc = abc1; abc; abc = abc->next() )\n"
|
" for ( ABC *abc = abc1; abc; abc = abc->next() )\n"
|
||||||
" {\n"
|
" {\n"
|
||||||
" abc->str[10] = 0;\n"
|
" abc->str[10] = 0;\n"
|
||||||
|
@ -1945,7 +1943,7 @@ private:
|
||||||
" }\n"
|
" }\n"
|
||||||
" a[i - 1] = 0;\n"
|
" a[i - 1] = 0;\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
"}", true);
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
// extracttests.start: int maybe();
|
// extracttests.start: int maybe();
|
||||||
|
@ -2172,13 +2170,13 @@ private:
|
||||||
check("void f() {\n"
|
check("void f() {\n"
|
||||||
" char str[3];\n"
|
" char str[3];\n"
|
||||||
" str[((unsigned char)3) - 1] = 0;\n"
|
" str[((unsigned char)3) - 1] = 0;\n"
|
||||||
"}", false, "test.cpp");
|
"}", "test.cpp");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("void f() {\n" // #5416 FP
|
check("void f() {\n" // #5416 FP
|
||||||
" char *str[3];\n"
|
" char *str[3];\n"
|
||||||
" do_something(&str[0][5]);\n"
|
" do_something(&str[0][5]);\n"
|
||||||
"}", false, "test.cpp");
|
"}", "test.cpp");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("class X { static const int x[100]; };\n" // #6070
|
check("class X { static const int x[100]; };\n" // #6070
|
||||||
|
@ -2415,7 +2413,7 @@ private:
|
||||||
"{\n"
|
"{\n"
|
||||||
" char s[3];\n"
|
" char s[3];\n"
|
||||||
" f1(s,3);\n"
|
" f1(s,3);\n"
|
||||||
"}\n", false);
|
"}\n");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2956,7 +2954,7 @@ private:
|
||||||
check("void f() {\n" // #6350 - fp when there is cast of buffer
|
check("void f() {\n" // #6350 - fp when there is cast of buffer
|
||||||
" wchar_t buf[64];\n"
|
" wchar_t buf[64];\n"
|
||||||
" p = (unsigned char *) buf + sizeof (buf);\n"
|
" p = (unsigned char *) buf + sizeof (buf);\n"
|
||||||
"}", false, "6350.c");
|
"}", "6350.c");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("int f() {\n"
|
check("int f() {\n"
|
||||||
|
@ -3815,7 +3813,7 @@ private:
|
||||||
"\n"
|
"\n"
|
||||||
"void bar(char *p) {\n"
|
"void bar(char *p) {\n"
|
||||||
" strncpy(p, str, 100);\n"
|
" strncpy(p, str, 100);\n"
|
||||||
"}\n", false);
|
"}\n");
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (warning, inconclusive) The buffer 'str' may not be null-terminated after the call to strncpy().\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (warning, inconclusive) The buffer 'str' may not be null-terminated after the call to strncpy().\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4313,7 +4311,6 @@ private:
|
||||||
"{\n"
|
"{\n"
|
||||||
" int *a;\n"
|
" int *a;\n"
|
||||||
" a = (int *)alloca( -10 );\n"
|
" a = (int *)alloca( -10 );\n"
|
||||||
" free(a);\n"
|
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (error) Memory allocation size is negative.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:4]: (error) Memory allocation size is negative.\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue