diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 7a8935eeb..09b27ee08 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -1537,6 +1537,10 @@ void Tokenizer::simplifyTypedef() break; } + if (!tok) { + syntaxError(nullptr); + return; + } if (tok->str() == ";") done = true; else if (tok->str() == ",") { diff --git a/test/testgarbage.cpp b/test/testgarbage.cpp index 03535e955..32032197a 100644 --- a/test/testgarbage.cpp +++ b/test/testgarbage.cpp @@ -120,6 +120,7 @@ private: TEST_CASE(garbageCode79); TEST_CASE(garbageCode80); TEST_CASE(garbageCode81); + TEST_CASE(garbageCode82); TEST_CASE(garbageValueFlow); TEST_CASE(garbageSymbolDatabase); @@ -569,8 +570,9 @@ private: ASSERT_THROW(checkCode("{ } if () try { } catch (...) B::~B { }"), InternalError); } - void garbageCode58() { // #6732 + void garbageCode58() { // #6732, #6762 //ASSERT_THROW(checkCode("{ }> {= ~A()^{} }P { }"), InternalError); + //ASSERT_THROW(checkCode("{= ~A()^{} }P { } { }> is"), InternalError); } void garbageCode59() { // #6735 @@ -665,6 +667,10 @@ private: ASSERT_THROW(checkCode("{ } [ ] { ( ) } { } typedef void ( *fptr1 ) ( ) const"), InternalError); } + void garbageCode82() { // #6761 + ASSERT_THROW(checkCode("p(\"Hello \" 14) _yn(const size_t) typedef bool pfunk (*pfunk)(const size_t)"), InternalError); + } + void garbageValueFlow() { // #6089 const char* code = "{} int foo(struct, x1, struct x2, x3, int, x5, x6, x7)\n"