diff options
Diffstat (limited to 'code/AssetLib/MD5/MD5Parser.cpp')
-rw-r--r-- | code/AssetLib/MD5/MD5Parser.cpp | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/code/AssetLib/MD5/MD5Parser.cpp b/code/AssetLib/MD5/MD5Parser.cpp index 2de8d5033..03b40448c 100644 --- a/code/AssetLib/MD5/MD5Parser.cpp +++ b/code/AssetLib/MD5/MD5Parser.cpp @@ -3,7 +3,7 @@ Open Asset Import Library (assimp) --------------------------------------------------------------------------- -Copyright (c) 2006-2024, assimp team +Copyright (c) 2006-2025, assimp team All rights reserved. @@ -44,7 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // internal headers -#include "AssetLib/MD5/MD5Loader.h" +#include "MD5Loader.h" #include "Material/MaterialSystem.h" #include <assimp/ParsingUtils.h> @@ -115,15 +115,19 @@ void MD5Parser::ParseHeader() { ReportError("MD5 version tag is unknown (10 is expected)"); } SkipLine(); + + // print the command line options to the console + char *sz = buffer; + while (buffer < bufferEnd) { + if (IsLineEnd(*buffer++)) { + break; + } + } + if (buffer == bufferEnd) { return; } - // print the command line options to the console - // FIX: can break the log length limit, so we need to be careful - char *sz = buffer; - while (!IsLineEnd(*buffer++)); - ASSIMP_LOG_INFO(std::string(sz, std::min((uintptr_t)MAX_LOG_MESSAGE_LENGTH, (uintptr_t)(buffer - sz)))); SkipSpacesAndLineEnd(); } @@ -273,6 +277,8 @@ inline bool AI_MD5_PARSE_STRING(const char **sz, const char *bufferEnd, aiString } } out.length = (ai_uint32)(szEnd - szStart); + if (out.length >= AI_MAXLEN) + out.length = AI_MAXLEN - 1; ::memcpy(out.data, szStart, out.length); out.data[out.length] = '\0'; @@ -287,7 +293,7 @@ inline void AI_MD5_PARSE_STRING_IN_QUOTATION(const char **sz, const char *buffer } if ('\0' != **sz) { const char *szStart = ++(*sz); - + while (('\"' != **sz && '\0' != **sz) && *sz != bufferEnd) { ++*sz; } @@ -295,6 +301,8 @@ inline void AI_MD5_PARSE_STRING_IN_QUOTATION(const char **sz, const char *buffer const char *szEnd = *sz; ++*sz; out.length = (ai_uint32)(szEnd - szStart); + if (out.length >= AI_MAXLEN) + out.length = AI_MAXLEN - 1; ::memcpy(out.data, szStart, out.length); } } @@ -320,7 +328,7 @@ MD5MeshParser::MD5MeshParser(SectionArray &mSections) { const char *sz = elem.szStart; AI_MD5_PARSE_STRING_IN_QUOTATION(&sz, elem.end, desc.mName); - + AI_MD5_SKIP_SPACES(&sz, elem.end, elem.iLineNumber); // negative values, at least -1, is allowed here |