Fix Heap-buffer-overflow READ in ODDLParser::OpenDDLParser::parseStructure

pull/5195/head
Alex 2023-08-06 06:51:47 +00:00
parent 60989a598e
commit ffed4ba016
1 changed files with 19 additions and 13 deletions

View File

@ -338,6 +338,7 @@ char *OpenDDLParser::parseStructure(char *in, char *end) {
bool error(false); bool error(false);
in = lookForNextToken(in, end); in = lookForNextToken(in, end);
if (in != end) {
if (*in == *Grammar::OpenBracketToken) { if (*in == *Grammar::OpenBracketToken) {
// loop over all children ( data and nodes ) // loop over all children ( data and nodes )
do { do {
@ -345,14 +346,19 @@ char *OpenDDLParser::parseStructure(char *in, char *end) {
if (in == nullptr) { if (in == nullptr) {
return nullptr; return nullptr;
} }
} while (*in != *Grammar::CloseBracketToken); } while (in != end &&
*in != *Grammar::CloseBracketToken);
if (in != end) {
++in; ++in;
}
} else { } else {
++in; ++in;
logInvalidTokenError(in, std::string(Grammar::OpenBracketToken), m_logCallback); logInvalidTokenError(in, std::string(Grammar::OpenBracketToken), m_logCallback);
error = true; error = true;
return nullptr; return nullptr;
} }
}
in = lookForNextToken(in, end); in = lookForNextToken(in, end);
// pop node from stack after successful parsing // pop node from stack after successful parsing