From a7306abcfefbc2aff140c4bb9eda8ce88d31e243 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 31 Aug 2018 19:29:17 +0200 Subject: [PATCH 1/4] MDC-Loader: fix a possible nullptr access. --- CMakeLists.txt | 6 +++--- code/MDCLoader.cpp | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1fb717419..3d6037259 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,9 +111,9 @@ OPTION( INJECT_DEBUG_POSTFIX ) IF (IOS) - IF (NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE "Release") - ENDIF (NOT CMAKE_BUILD_TYPE) + IF (NOT CMAKE_BUILD_TYPE) + SET(CMAKE_BUILD_TYPE "Release") + ENDIF (NOT CMAKE_BUILD_TYPE) ENDIF (IOS) # Use subset of Windows.h diff --git a/code/MDCLoader.cpp b/code/MDCLoader.cpp index e294a1912..03b3336de 100644 --- a/code/MDCLoader.cpp +++ b/code/MDCLoader.cpp @@ -434,10 +434,12 @@ void MDCImporter::InternReadFile( else if (1 == pScene->mNumMeshes) { pScene->mRootNode = new aiNode(); - pScene->mRootNode->mName = pScene->mMeshes[0]->mName; - pScene->mRootNode->mNumMeshes = 1; - pScene->mRootNode->mMeshes = new unsigned int[1]; - pScene->mRootNode->mMeshes[0] = 0; + if ( nullptr != pScene->mMeshes[0] ) { + pScene->mRootNode->mName = pScene->mMeshes[0]->mName; + pScene->mRootNode->mNumMeshes = 1; + pScene->mRootNode->mMeshes = new unsigned int[1]; + pScene->mRootNode->mMeshes[0] = 0; + } } else { From f206c5ebf0e6b90499306ed7fc89306caf6a0595 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 31 Aug 2018 21:46:12 +0200 Subject: [PATCH 2/4] MDC: prepare a unittest. --- test/CMakeLists.txt | 1 + test/unit/utMDCImportExport.cpp | 57 +++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 test/unit/utMDCImportExport.cpp diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d92b52b5a..b6be32dca 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -113,6 +113,7 @@ SET( IMPORTERS unit/utColladaImportExport.cpp unit/utCSMImportExport.cpp unit/utB3DImportExport.cpp + unit/utMDCImportExport.cpp ) SET( MATERIAL diff --git a/test/unit/utMDCImportExport.cpp b/test/unit/utMDCImportExport.cpp new file mode 100644 index 000000000..d4a78193c --- /dev/null +++ b/test/unit/utMDCImportExport.cpp @@ -0,0 +1,57 @@ +/* +--------------------------------------------------------------------------- +Open Asset Import Library (assimp) +--------------------------------------------------------------------------- + +Copyright (c) 2006-2018, assimp team + + + +All rights reserved. + +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following +conditions are met: + +* Redistributions of source code must retain the above +copyright notice, this list of conditions and the +following disclaimer. + +* Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the +following disclaimer in the documentation and/or other +materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its +contributors may be used to endorse or promote products +derived from this software without specific prior +written permission of the assimp team. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--------------------------------------------------------------------------- +*/ + +#include "UnitTestPCH.h" + +using namespace Assimp; + +class utMDCImportExport : public AbstractImportExportBase { +public: + virtual bool importerTest() { + return true; + } +}; + +TEST_F( utMDCImportExport, importIFCFromFileTest ) { + EXPECT_TRUE( importerTest() ); +} From e174326ae977086387543b2bb0a72d8631fa4a39 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 1 Sep 2018 18:07:04 +0200 Subject: [PATCH 3/4] MDC: Fix unittest build. --- test/unit/utMDCImportExport.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/unit/utMDCImportExport.cpp b/test/unit/utMDCImportExport.cpp index d4a78193c..5f74c409a 100644 --- a/test/unit/utMDCImportExport.cpp +++ b/test/unit/utMDCImportExport.cpp @@ -42,6 +42,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "UnitTestPCH.h" +#include "AbstractImportExportBase.h" using namespace Assimp; @@ -52,6 +53,6 @@ public: } }; -TEST_F( utMDCImportExport, importIFCFromFileTest ) { +TEST_F( utMDCImportExport, importMDCFromFileTest ) { EXPECT_TRUE( importerTest() ); } From 008455b984d72e491ce89c8746439648bbab9bf8 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 2 Sep 2018 10:38:21 +0200 Subject: [PATCH 4/4] MDC: introduce model to test MDC-format. --- test/models/MDC/spider.mdc | Bin 0 -> 986240 bytes test/unit/utMDCImportExport.cpp | 5 +++++ 2 files changed, 5 insertions(+) create mode 100644 test/models/MDC/spider.mdc diff --git a/test/models/MDC/spider.mdc b/test/models/MDC/spider.mdc new file mode 100644 index 0000000000000000000000000000000000000000..dcd4df835ca49122df078e08f453b73c010e0a88 GIT binary patch literal 986240 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

cO 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 QWFQk+$c7&Q +#include using namespace Assimp; class utMDCImportExport : public AbstractImportExportBase { public: virtual bool importerTest() { + Assimp::Importer importer; + const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/MDC/spider.mdc", 0); return true; + return nullptr != scene; } };