Skip to content

Commit 5b377ea

Browse files
committed
Fixed danmar#7821 (segmentation fault, invalid last token)
1 parent 769b6a0 commit 5b377ea

12 files changed

Lines changed: 179 additions & 290 deletions

lib/tokenize.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8027,6 +8027,14 @@ const Token * Tokenizer::findGarbageCode() const
80278027
}
80288028
}
80298029
}
8030+
8031+
// Code must end with } ; ) NAME
8032+
if (!Token::Match(list.back(), "%name%|;|}|)"))
8033+
return list.back();
8034+
if (list.back()->str() == ")" && !Token::Match(list.back()->link()->previous(), "%name% ("))
8035+
return list.back();
8036+
8037+
80308038
return nullptr;
80318039
}
80328040

test/testbufferoverrun.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ class TestBufferOverrun : public TestFixture {
158158
TEST_CASE(buffer_overrun_16);
159159
TEST_CASE(buffer_overrun_18); // ticket #2576 - for, calculation with loop variable
160160
TEST_CASE(buffer_overrun_19); // #2597 - class member with unknown type
161-
TEST_CASE(buffer_overrun_20); // #2986 (segmentation fault)
162161
TEST_CASE(buffer_overrun_21);
163162
TEST_CASE(buffer_overrun_24); // index variable is changed in for-loop
164163
TEST_CASE(buffer_overrun_26); // #4432 (segmentation fault)
@@ -2413,11 +2412,6 @@ class TestBufferOverrun : public TestFixture {
24132412
ASSERT_EQUALS("", errout.str());
24142413
}
24152414

2416-
void buffer_overrun_20() { // #2986(segmentation fault)
2417-
check("x[y]\n");
2418-
ASSERT_EQUALS("", errout.str());
2419-
}
2420-
24212415
void buffer_overrun_21() {
24222416
check("void foo()\n"
24232417
"{ { {\n"

test/testconstructors.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2905,41 +2905,38 @@ class TestConstructors : public TestFixture {
29052905

29062906

29072907
void uninitVarHeader1() {
2908-
check("#file \"fred.h\"\n"
2908+
check("#line 1 \"fred.h\"\n"
29092909
"class Fred\n"
29102910
"{\n"
29112911
"private:\n"
29122912
" unsigned int i;\n"
29132913
"public:\n"
29142914
" Fred();\n"
2915-
"};\n"
2916-
"#endfile");
2915+
"};\n");
29172916
ASSERT_EQUALS("", errout.str());
29182917
}
29192918

29202919
void uninitVarHeader2() {
2921-
check("#file \"fred.h\"\n"
2920+
check("#line 1 \"fred.h\"\n"
29222921
"class Fred\n"
29232922
"{\n"
29242923
"private:\n"
29252924
" unsigned int i;\n"
29262925
"public:\n"
29272926
" Fred() { }\n"
2928-
"};\n"
2929-
"#endfile");
2927+
"};\n");
29302928
ASSERT_EQUALS("[fred.h:6]: (warning) Member variable 'Fred::i' is not initialized in the constructor.\n", errout.str());
29312929
}
29322930

29332931
void uninitVarHeader3() {
2934-
check("#file \"fred.h\"\n"
2932+
check("#line 1 \"fred.h\"\n"
29352933
"class Fred\n"
29362934
"{\n"
29372935
"private:\n"
29382936
" mutable int i;\n"
29392937
"public:\n"
29402938
" Fred() { }\n"
2941-
"};\n"
2942-
"#endfile");
2939+
"};\n");
29432940
ASSERT_EQUALS("[fred.h:6]: (warning) Member variable 'Fred::i' is not initialized in the constructor.\n", errout.str());
29442941
}
29452942

0 commit comments

Comments
 (0)