Skip to content

Commit 2b773f0

Browse files
tyler92kimkulling
andauthored
Fix heap-buffer-overflow in OpenDDLParser (assimp#5919)
Co-authored-by: Kim Kulling <[email protected]>
1 parent 7a11405 commit 2b773f0

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

contrib/openddlparser/code/OpenDDLParser.cpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,11 @@ const char *getTypeToken(Value::ValueType type) {
7474
return Grammar::PrimitiveTypeToken[(size_t)type];
7575
}
7676

77-
static void logInvalidTokenError(const char *in, const std::string &exp, OpenDDLParser::logCallback callback) {
78-
if (callback) {
79-
std::string full(in);
80-
std::string part(full.substr(0, 50));
77+
static void logInvalidTokenError(const std::string &in, const std::string &exp, OpenDDLParser::logCallback callback) {
78+
if (callback) {\
79+
std::string part(in.substr(0, 50));
8180
std::stringstream stream;
82-
stream << "Invalid token \"" << *in << "\" "
81+
stream << "Invalid token \"" << in << "\" "
8382
<< "(expected \"" << exp << "\") "
8483
<< "in: \"" << part << "\"";
8584
callback(ddl_error_msg, stream.str());
@@ -306,7 +305,7 @@ char *OpenDDLParser::parseHeader(char *in, char *end) {
306305
}
307306

308307
if (*in != Grammar::CommaSeparator[0] && *in != Grammar::ClosePropertyToken[0]) {
309-
logInvalidTokenError(in, Grammar::ClosePropertyToken, m_logCallback);
308+
logInvalidTokenError(std::string(in, end), Grammar::ClosePropertyToken, m_logCallback);
310309
return nullptr;
311310
}
312311

@@ -355,8 +354,7 @@ char *OpenDDLParser::parseStructure(char *in, char *end) {
355354
++in;
356355
}
357356
} else {
358-
++in;
359-
logInvalidTokenError(in, std::string(Grammar::OpenBracketToken), m_logCallback);
357+
logInvalidTokenError(std::string(in, end), std::string(Grammar::OpenBracketToken), m_logCallback);
360358
error = true;
361359
return nullptr;
362360
}
@@ -427,7 +425,7 @@ char *OpenDDLParser::parseStructureBody(char *in, char *end, bool &error) {
427425

428426
in = lookForNextToken(in, end);
429427
if (in == end || *in != '}') {
430-
logInvalidTokenError(in == end ? "" : in, std::string(Grammar::CloseBracketToken), m_logCallback);
428+
logInvalidTokenError(std::string(in, end), std::string(Grammar::CloseBracketToken), m_logCallback);
431429
return nullptr;
432430
} else {
433431
//in++;

0 commit comments

Comments
 (0)