Fixed #2605 (cppcheck hangs with 100% cpu load ( #define = ))
This commit is contained in:
parent
dd12fc177f
commit
9983aa5721
|
@ -927,7 +927,18 @@ std::list<std::string> Preprocessor::getcfgs(const std::string &filedata, const
|
||||||
|
|
||||||
if (line.compare(0, 8, "#define ") == 0)
|
if (line.compare(0, 8, "#define ") == 0)
|
||||||
{
|
{
|
||||||
if (line.find(" ", 8) == std::string::npos)
|
bool valid = true;
|
||||||
|
for (std::string::size_type pos = 8; pos < line.size() && line[pos] != ' '; ++pos)
|
||||||
|
{
|
||||||
|
char ch = line[pos];
|
||||||
|
if (ch=='_' || (ch>='a' && ch<='z') || (ch>='A' && ch<='Z') || (pos>8 && ch>='0' && ch<='9'))
|
||||||
|
continue;
|
||||||
|
valid = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!valid)
|
||||||
|
line.clear();
|
||||||
|
else if (line.find(" ", 8) == std::string::npos)
|
||||||
defines.insert(line.substr(8));
|
defines.insert(line.substr(8));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -206,6 +206,8 @@ private:
|
||||||
TEST_CASE(testPreprocessorRead2);
|
TEST_CASE(testPreprocessorRead2);
|
||||||
TEST_CASE(testPreprocessorRead3);
|
TEST_CASE(testPreprocessorRead3);
|
||||||
TEST_CASE(testPreprocessorRead4);
|
TEST_CASE(testPreprocessorRead4);
|
||||||
|
|
||||||
|
TEST_CASE(invalid_define); // #2605 - hang for: '#define ='
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2720,6 +2722,18 @@ private:
|
||||||
ASSERT_EQUALS("#define A \" \\\\\\\\\" \" \"", preprocessor.read(istr, "test.cpp", 0));
|
ASSERT_EQUALS("#define A \" \\\\\\\\\" \" \"", preprocessor.read(istr, "test.cpp", 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void invalid_define()
|
||||||
|
{
|
||||||
|
Settings settings;
|
||||||
|
Preprocessor preprocessor(&settings, this);
|
||||||
|
|
||||||
|
std::istringstream src("#define =\n");
|
||||||
|
std::string processedFile;
|
||||||
|
std::list<std::string> cfg;
|
||||||
|
std::list<std::string> paths;
|
||||||
|
preprocessor.preprocess(src, processedFile, cfg, "", paths); // don't hang
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
REGISTER_TEST(TestPreprocessor)
|
REGISTER_TEST(TestPreprocessor)
|
||||||
|
|
Loading…
Reference in New Issue