File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -4286,7 +4286,10 @@ void Tokenizer::setVarIdPass2()
42864286 while (Token::Match (tokStart, " :: %name%" ) || tokStart->str () == " <" ) {
42874287 if (tokStart->str () == " <" ) {
42884288 // skip the template part
4289- tokStart = tokStart->findClosingBracket ()->next ();
4289+ const Token* closeTok = tokStart->findClosingBracket ();
4290+ if (!closeTok)
4291+ syntaxError (tok);
4292+ tokStart = closeTok->next ();
42904293 } else {
42914294 classnameTokens.push_back (tokStart->next ());
42924295 tokStart = tokStart->tokAt (2 );
Original file line number Diff line number Diff line change @@ -250,6 +250,7 @@ class TestGarbage : public TestFixture {
250250 TEST_CASE (garbageCode218); // #8763
251251 TEST_CASE (garbageCode219); // #10101
252252 TEST_CASE (garbageCode220); // #6832
253+ TEST_CASE (garbageCode221);
253254
254255 TEST_CASE (garbageCodeFuzzerClientMode1); // test cases created with the fuzzer client, mode 1
255256
@@ -1704,6 +1705,9 @@ class TestGarbage : public TestFixture {
17041705 void garbageCode220 () { // #6832
17051706 ASSERT_THROW (checkCode (" (){(){{()}}return;{switch()0 case(){}break;l:()}}\n " ), InternalError); // don't crash
17061707 }
1708+ void garbageCode221 () {
1709+ ASSERT_THROW (checkCode (" struct A<0<;\n " ), InternalError); // don't crash
1710+ }
17071711
17081712 void syntaxErrorFirstToken () {
17091713 ASSERT_THROW (checkCode (" &operator(){[]};" ), InternalError); // #7818
You can’t perform that action at this time.
0 commit comments