From d7bf8d6e07f60e91f5570835ace179b4f96cf943 Mon Sep 17 00:00:00 2001 From: sssaoi Date: Sat, 18 Dec 2021 14:50:22 +0900 Subject: [PATCH 1/9] Fix compile error when ASSIMP_BUILD_NO_X3D_IMPORTER is define. --- code/AssetLib/X3D/X3DImporter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/X3D/X3DImporter.cpp b/code/AssetLib/X3D/X3DImporter.cpp index b8b9d250e..fb8ec9bc5 100644 --- a/code/AssetLib/X3D/X3DImporter.cpp +++ b/code/AssetLib/X3D/X3DImporter.cpp @@ -480,6 +480,6 @@ void X3DImporter::ParseHelper_Node_Exit() { } } -#endif // !ASSIMP_BUILD_NO_X3D_IMPORTER - } // namespace Assimp + +#endif // !ASSIMP_BUILD_NO_X3D_IMPORTER From 7fc46035798fe236b4ef8858ea0acc9980bff321 Mon Sep 17 00:00:00 2001 From: Garux Date: Sat, 18 Dec 2021 14:32:46 +0300 Subject: [PATCH 2/9] fix test/models/3DS/IMAGE1.bmp: is jpg --- test/models/3DS/{IMAGE1.bmp => IMAGE1.jpg} | Bin test/models/3DS/test1.3ds | Bin 10654 -> 10654 bytes 2 files changed, 0 insertions(+), 0 deletions(-) rename test/models/3DS/{IMAGE1.bmp => IMAGE1.jpg} (100%) diff --git a/test/models/3DS/IMAGE1.bmp b/test/models/3DS/IMAGE1.jpg similarity index 100% rename from test/models/3DS/IMAGE1.bmp rename to test/models/3DS/IMAGE1.jpg diff --git a/test/models/3DS/test1.3ds b/test/models/3DS/test1.3ds index 17bbb47d397c854c8a53ae633037593a8cee9044..5a52977b0b82b61b0b08d9700ab93950825a33b8 100644 GIT binary patch delta 15 XcmbOiJTG{{o5>rQ#5OZA&d~q>Ia~%c delta 14 WcmbOiJTG{{8)hfpfQ|3hYXAT;DF(Oz From 572e31ddcb3c745dffb39b36a9a266d1e167eb3c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 18 Dec 2021 21:30:04 +0100 Subject: [PATCH 3/9] Update version to 5.1.4 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bbc7ee744..570c29305 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,7 +56,7 @@ IF(ASSIMP_HUNTER_ENABLED) add_definitions(-DASSIMP_USE_HUNTER) ENDIF() -PROJECT(Assimp VERSION 5.1.3) +PROJECT(Assimp VERSION 5.1.4) # All supported options ############################################### From 2eb86d75b86baff7c81b3dcb53de9a6c47dea5f8 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 22 Dec 2021 19:45:19 +0100 Subject: [PATCH 4/9] Make sure no overflow can happen - During UTF32 LE with BOM make sure that the byteswap operation will have enough space when iterating through the text buffer, which shall get encoded. - closes https://github.com/assimp/assimp/issues/4230 --- code/Common/BaseImporter.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/Common/BaseImporter.cpp b/code/Common/BaseImporter.cpp index d7e24afab..c0a87b632 100644 --- a/code/Common/BaseImporter.cpp +++ b/code/Common/BaseImporter.cpp @@ -65,6 +65,7 @@ using namespace Assimp; // Constructor to be privately used by Importer BaseImporter::BaseImporter() AI_NO_EXCEPT : m_progress() { + // empty } // ------------------------------------------------------------------------------------------------ @@ -371,11 +372,16 @@ void BaseImporter::ConvertToUTF8(std::vector &data) { } // UTF 16 BE with BOM + size_t index = 0; if (*((uint16_t *)&data.front()) == 0xFFFE) { - // swap the endianness .. for (uint16_t *p = (uint16_t *)&data.front(), *end = (uint16_t *)&data.back(); p <= end; ++p) { - ByteSwap::Swap2(p); + // Check to ensure no overflow can happen + if ((index+2) < data.Size()) { + // Swap the data + ByteSwap::Swap2(p); + index += 2; + } } } From 215f4e1f4dcca57f1dee9f18519df1af659ad62c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 22 Dec 2021 20:02:29 +0100 Subject: [PATCH 5/9] Fix typo --- code/Common/BaseImporter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Common/BaseImporter.cpp b/code/Common/BaseImporter.cpp index c0a87b632..570ba7f7b 100644 --- a/code/Common/BaseImporter.cpp +++ b/code/Common/BaseImporter.cpp @@ -377,7 +377,7 @@ void BaseImporter::ConvertToUTF8(std::vector &data) { // swap the endianness .. for (uint16_t *p = (uint16_t *)&data.front(), *end = (uint16_t *)&data.back(); p <= end; ++p) { // Check to ensure no overflow can happen - if ((index+2) < data.Size()) { + if ((index+2) < data.size()) { // Swap the data ByteSwap::Swap2(p); index += 2; From 2c66d4d3a2c7b9b6c74f38c8a4ef847f4e624740 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 22 Dec 2021 20:43:44 +0100 Subject: [PATCH 6/9] Optimize the check --- code/Common/BaseImporter.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/Common/BaseImporter.cpp b/code/Common/BaseImporter.cpp index 570ba7f7b..82b8f12fc 100644 --- a/code/Common/BaseImporter.cpp +++ b/code/Common/BaseImporter.cpp @@ -372,16 +372,14 @@ void BaseImporter::ConvertToUTF8(std::vector &data) { } // UTF 16 BE with BOM - size_t index = 0; if (*((uint16_t *)&data.front()) == 0xFFFE) { + // Check to ensure no overflow can happen + if(data.size() % 2 != 0) { + return; + } // swap the endianness .. for (uint16_t *p = (uint16_t *)&data.front(), *end = (uint16_t *)&data.back(); p <= end; ++p) { - // Check to ensure no overflow can happen - if ((index+2) < data.size()) { - // Swap the data - ByteSwap::Swap2(p); - index += 2; - } + ByteSwap::Swap2(p); } } From 635153b3a4d5e203e446f0b1f547365f7c2769c4 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Wed, 22 Dec 2021 21:08:28 +0100 Subject: [PATCH 7/9] LWS-Import: Avoid access to empty string token - Fix invalid access to string pointer when string token is empty - closes https://github.com/assimp/assimp/issues/4222 --- code/AssetLib/LWS/LWSLoader.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/AssetLib/LWS/LWSLoader.cpp b/code/AssetLib/LWS/LWSLoader.cpp index cb07787fa..cf04579b0 100644 --- a/code/AssetLib/LWS/LWSLoader.cpp +++ b/code/AssetLib/LWS/LWSLoader.cpp @@ -537,6 +537,11 @@ void LWSImporter::InternReadFile(const std::string &pFile, aiScene *pScene, IOSy // get file format version and print to log ++it; + + if ((*it).tokens[0].empty()) { + ASSIMP_LOG_ERROR("Invalid LWS file detectedm abort import."); + return; + } unsigned int version = strtoul10((*it).tokens[0].c_str()); ASSIMP_LOG_INFO("LWS file format version is ", (*it).tokens[0]); first = 0.; From db2500c39341f8169ffd4fbd2e26cd4aee293437 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 23 Dec 2021 12:28:43 +0100 Subject: [PATCH 8/9] MDL: Do not try to copy empty embedded texture - When an embedded texture is empty, skip it instead of trying to copy it. This must fail. - closes https://github.com/assimp/assimp/issues/4238 - Found from the Google fuzzer. --- code/AssetLib/MDL/MDLMaterialLoader.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/MDL/MDLMaterialLoader.cpp b/code/AssetLib/MDL/MDLMaterialLoader.cpp index 62320814a..4f441a054 100644 --- a/code/AssetLib/MDL/MDLMaterialLoader.cpp +++ b/code/AssetLib/MDL/MDLMaterialLoader.cpp @@ -463,8 +463,12 @@ void MDLImporter::ParseSkinLump_3DGS_MDL7( ASSIMP_LOG_WARN("Found a reference to an embedded DDS texture, " "but texture height is not equal to 1, which is not supported by MED"); } - - pcNew.reset(new aiTexture()); + if (iWidth == 0) { + ASSIMP_LOG_ERROR("Found a reference to an embedded DDS texture, but texture width is zero, aborting import."); + return; + } + + pcNew.reset(new aiTexture); pcNew->mHeight = 0; pcNew->mWidth = iWidth; From d44641398fff18f151d5f7d986736b7d5b0450d5 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 26 Dec 2021 11:16:02 +0100 Subject: [PATCH 9/9] Add console progresshandler --- code/Common/DefaultProgressHandler.h | 17 ++++++++------- code/Common/Importer.cpp | 2 +- include/assimp/ProgressHandler.hpp | 1 + tools/assimp_cmd/Main.cpp | 31 ++++++++++++++++++++++++---- 4 files changed, 38 insertions(+), 13 deletions(-) diff --git a/code/Common/DefaultProgressHandler.h b/code/Common/DefaultProgressHandler.h index 4626204af..ebf4a0e74 100644 --- a/code/Common/DefaultProgressHandler.h +++ b/code/Common/DefaultProgressHandler.h @@ -4,7 +4,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2021, assimp team - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -48,18 +47,20 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -namespace Assimp { +namespace Assimp { // ------------------------------------------------------------------------------------ -/** @brief Internal default implementation of the #ProgressHandler interface. */ +/** + * @brief Internal default implementation of the #ProgressHandler interface. + */ class DefaultProgressHandler : public ProgressHandler { - - virtual bool Update(float /*percentage*/) { +public: + /// @brief Ignores the update callback. + bool Update(float) override { return false; } +}; - -}; // !class DefaultProgressHandler } // Namespace Assimp -#endif +#endif // INCLUDED_AI_DEFAULTPROGRESSHANDLER_H diff --git a/code/Common/Importer.cpp b/code/Common/Importer.cpp index 41b73fd12..2f9c23bec 100644 --- a/code/Common/Importer.cpp +++ b/code/Common/Importer.cpp @@ -329,7 +329,7 @@ bool Importer::IsDefaultIOHandler() const { // ------------------------------------------------------------------------------------------------ // Supplies a custom progress handler to get regular callbacks during importing -void Importer::SetProgressHandler ( ProgressHandler* pHandler ) { +void Importer::SetProgressHandler(ProgressHandler* pHandler) { ai_assert(nullptr != pimpl); ASSIMP_BEGIN_EXCEPTION_REGION(); diff --git a/include/assimp/ProgressHandler.hpp b/include/assimp/ProgressHandler.hpp index a42015400..40661fba8 100644 --- a/include/assimp/ProgressHandler.hpp +++ b/include/assimp/ProgressHandler.hpp @@ -74,6 +74,7 @@ protected: public: /// @brief Virtual destructor. virtual ~ProgressHandler () { + // empty } // ------------------------------------------------------------------- diff --git a/tools/assimp_cmd/Main.cpp b/tools/assimp_cmd/Main.cpp index 8d76e1f5e..87467579f 100644 --- a/tools/assimp_cmd/Main.cpp +++ b/tools/assimp_cmd/Main.cpp @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2021, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -47,6 +45,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "Main.h" +#include +#include + +class ConsoleProgressHandler : public ProgressHandler { +public: + ConsoleProgressHandler() : + ProgressHandler() { + // empty + } + + ~ConsoleProgressHandler() override { + // empty + } + + bool Update(float percentage) override { + std::cout << percentage * 100.0f << " %\n"; + return true; + } +}; const char* AICMD_MSG_ABOUT = "------------------------------------------------------ \n" "Open Asset Import Library (\"Assimp\", https://github.com/assimp/assimp) \n" @@ -73,10 +90,10 @@ const char* AICMD_MSG_HELP = "\n Use \'assimp --help\' for detailed help on a command.\n" ; -/*extern*/ Assimp::Importer* globalImporter = NULL; +/*extern*/ Assimp::Importer* globalImporter = nullptr; #ifndef ASSIMP_BUILD_NO_EXPORT -/*extern*/ Assimp::Exporter* globalExporter = NULL; +/*extern*/ Assimp::Exporter* globalExporter = nullptr; #endif // ------------------------------------------------------------------------------ @@ -286,6 +303,9 @@ const aiScene* ImportModel( // do the actual import, measure time const clock_t first = clock(); + ConsoleProgressHandler *ph = new ConsoleProgressHandler; + globalImporter->SetProgressHandler(ph); + const aiScene* scene = globalImporter->ReadFile(path,imp.ppFlags); if (imp.showLog) { @@ -305,6 +325,9 @@ const aiScene* ImportModel( if (imp.log) { FreeLogStreams(); } + globalImporter->SetProgressHandler(nullptr); + delete ph; + return scene; }