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,20 +338,26 @@ char *OpenDDLParser::parseStructure(char *in, char *end) {
bool error(false); bool error(false);
in = lookForNextToken(in, end); in = lookForNextToken(in, end);
if (*in == *Grammar::OpenBracketToken) { if (in != end) {
// loop over all children ( data and nodes ) if (*in == *Grammar::OpenBracketToken) {
do { // loop over all children ( data and nodes )
in = parseStructureBody(in, end, error); do {
if (in == nullptr) { in = parseStructureBody(in, end, error);
return nullptr; if (in == nullptr) {
return nullptr;
}
} while (in != end &&
*in != *Grammar::CloseBracketToken);
if (in != end) {
++in;
} }
} while (*in != *Grammar::CloseBracketToken); } else {
++in; ++in;
} else { logInvalidTokenError(in, std::string(Grammar::OpenBracketToken), m_logCallback);
++in; error = true;
logInvalidTokenError(in, std::string(Grammar::OpenBracketToken), m_logCallback); return nullptr;
error = true; }
return nullptr;
} }
in = lookForNextToken(in, end); in = lookForNextToken(in, end);