#7321 segmentation fault in valueFlowSwitchVariableScope::isVariableDeclaration
This commit is contained in:
parent
cfe9c01bf8
commit
d3546ea410
|
@ -39,7 +39,7 @@ namespace {
|
||||||
static const struct CWE CWE676(676U);
|
static const struct CWE CWE676(676U);
|
||||||
static const struct CWE CWE908(908U);
|
static const struct CWE CWE908(908U);
|
||||||
static const struct CWE CWE825(825U);
|
static const struct CWE CWE825(825U);
|
||||||
|
|
||||||
|
|
||||||
void CheckUninitVar::check()
|
void CheckUninitVar::check()
|
||||||
{
|
{
|
||||||
|
|
|
@ -3027,13 +3027,13 @@ bool Scope::isVariableDeclaration(const Token* const tok, const Token*& vartok,
|
||||||
if (localVarTok->str() == "const")
|
if (localVarTok->str() == "const")
|
||||||
localVarTok = localVarTok->next();
|
localVarTok = localVarTok->next();
|
||||||
|
|
||||||
if (Token::Match(localVarTok, "%name% ;|=") || (localVarTok->varId() && localVarTok->strAt(1) == ":")) {
|
if (Token::Match(localVarTok, "%name% ;|=") || (localVarTok && localVarTok->varId() && localVarTok->strAt(1) == ":")) {
|
||||||
vartok = localVarTok;
|
vartok = localVarTok;
|
||||||
typetok = localTypeTok;
|
typetok = localTypeTok;
|
||||||
} else if (Token::Match(localVarTok, "%name% )|[") && localVarTok->str() != "operator") {
|
} else if (Token::Match(localVarTok, "%name% )|[") && localVarTok->str() != "operator") {
|
||||||
vartok = localVarTok;
|
vartok = localVarTok;
|
||||||
typetok = localTypeTok;
|
typetok = localTypeTok;
|
||||||
} else if (localVarTok->varId() && Token::Match(localVarTok, "%name% (|{") &&
|
} else if (localVarTok && localVarTok->varId() && Token::Match(localVarTok, "%name% (|{") &&
|
||||||
Token::Match(localVarTok->next()->link(), ")|} ;")) {
|
Token::Match(localVarTok->next()->link(), ")|} ;")) {
|
||||||
vartok = localVarTok;
|
vartok = localVarTok;
|
||||||
typetok = localTypeTok;
|
typetok = localTypeTok;
|
||||||
|
|
|
@ -225,6 +225,7 @@ private:
|
||||||
TEST_CASE(garbageCode174); // #7356
|
TEST_CASE(garbageCode174); // #7356
|
||||||
TEST_CASE(garbageCode175);
|
TEST_CASE(garbageCode175);
|
||||||
TEST_CASE(garbageCode176);
|
TEST_CASE(garbageCode176);
|
||||||
|
TEST_CASE(garbageCode177);
|
||||||
TEST_CASE(garbageValueFlow);
|
TEST_CASE(garbageValueFlow);
|
||||||
TEST_CASE(garbageSymbolDatabase);
|
TEST_CASE(garbageSymbolDatabase);
|
||||||
TEST_CASE(garbageAST);
|
TEST_CASE(garbageAST);
|
||||||
|
@ -1479,6 +1480,10 @@ private:
|
||||||
void garbageCode176() { // #7527
|
void garbageCode176() { // #7527
|
||||||
checkCode("class t { { struct } enum class f : unsigned { q } b ; operator= ( T ) { switch ( b ) { case f::q: } } { assert ( b ) ; } } { ; & ( t ) ( f::t ) ; } ;");
|
checkCode("class t { { struct } enum class f : unsigned { q } b ; operator= ( T ) { switch ( b ) { case f::q: } } { assert ( b ) ; } } { ; & ( t ) ( f::t ) ; } ;");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void garbageCode177() { // #7321
|
||||||
|
checkCode("{(){(())}}r&const");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TEST(TestGarbage)
|
REGISTER_TEST(TestGarbage)
|
||||||
|
|
Loading…
Reference in New Issue