diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index b8dabfff4..0a5927ce7 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -483,7 +483,7 @@ aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const c } pimpl->mProgressHandler->UpdateFileWrite(3, 4); - + if(must_join_again) { JoinVerticesProcess proc; proc.Execute(scenecopy.get()); diff --git a/fuzz/assimp_fuzzer.cc b/fuzz/assimp_fuzzer.cc index edb5fdbb5..e347f59cb 100644 --- a/fuzz/assimp_fuzzer.cc +++ b/fuzz/assimp_fuzzer.cc @@ -40,6 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include +#include #include #include @@ -53,6 +54,13 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataSize) { const aiScene *sc = importer.ReadFileFromMemory(data, dataSize, aiProcessPreset_TargetRealtime_Quality, nullptr ); + if (sc == nullptr) { + return 0; + } + + Exporter exporter; + exporter.ExportToBlob(sc, "fbx"); + aiDetachLogStream(&stream); return 0; diff --git a/test/unit/utExport.cpp b/test/unit/utExport.cpp index b3ab5e372..cb7826bfc 100644 --- a/test/unit/utExport.cpp +++ b/test/unit/utExport.cpp @@ -1,38 +1,71 @@ -#include "UnitTestPCH.h" +/* +--------------------------------------------------------------------------- +Open Asset Import Library (assimp) +--------------------------------------------------------------------------- +Copyright (c) 2006-2022, 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" #include #include - #ifndef ASSIMP_BUILD_NO_EXPORT class ExporterTest : public ::testing::Test { public: - - virtual void SetUp() - { + void SetUp() override { ex = new Assimp::Exporter(); im = new Assimp::Importer(); pTest = im->ReadFile(ASSIMP_TEST_MODELS_DIR "/X/test.x", aiProcess_ValidateDataStructure); } - virtual void TearDown() - { + void TearDown() override { delete ex; delete im; } protected: - const aiScene* pTest; Assimp::Exporter* ex; Assimp::Importer* im; }; // ------------------------------------------------------------------------------------------------ -TEST_F(ExporterTest, testExportToFile) -{ +TEST_F(ExporterTest, testExportToFile) { const char* file = "unittest_output.dae"; EXPECT_EQ(AI_SUCCESS,ex->Export(pTest,"collada",file)); @@ -41,8 +74,7 @@ TEST_F(ExporterTest, testExportToFile) } // ------------------------------------------------------------------------------------------------ -TEST_F(ExporterTest, testExportToBlob) -{ +TEST_F(ExporterTest, testExportToBlob) { const aiExportDataBlob* blob = ex->ExportToBlob(pTest,"collada"); ASSERT_TRUE(blob); EXPECT_TRUE(blob->data); @@ -56,8 +88,7 @@ TEST_F(ExporterTest, testExportToBlob) } // ------------------------------------------------------------------------------------------------ -TEST_F(ExporterTest, testCppExportInterface) -{ +TEST_F(ExporterTest, testCppExportInterface) { EXPECT_TRUE(ex->GetExportFormatCount() > 0); for(size_t i = 0; i < ex->GetExportFormatCount(); ++i) { const aiExportFormatDesc* const desc = ex->GetExportFormatDescription(i); @@ -71,14 +102,13 @@ TEST_F(ExporterTest, testCppExportInterface) } // ------------------------------------------------------------------------------------------------ -TEST_F(ExporterTest, testCExportInterface) -{ +TEST_F(ExporterTest, testCExportInterface) { EXPECT_TRUE(aiGetExportFormatCount() > 0); for(size_t i = 0; i < aiGetExportFormatCount(); ++i) { const aiExportFormatDesc* const desc = aiGetExportFormatDescription(i); EXPECT_TRUE(desc); - // rest has already been validated by testCppExportInterface } } #endif +