summaryrefslogtreecommitdiffstats
path: root/code/AssetLib/MD5/MD5Parser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'code/AssetLib/MD5/MD5Parser.cpp')
-rw-r--r--code/AssetLib/MD5/MD5Parser.cpp26
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