فهرست منبع

Update: Enable export for fuzzer tests

Kim Kulling 2 سال پیش
والد
کامیت
9d6b32f5c5
3فایلهای تغییر یافته به همراه56 افزوده شده و 18 حذف شده
  1. 1 1
      code/Common/Exporter.cpp
  2. 8 0
      fuzz/assimp_fuzzer.cc
  3. 47 17
      test/unit/utExport.cpp

+ 1 - 1
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());

+ 8 - 0
fuzz/assimp_fuzzer.cc

@@ -40,6 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 #include <assimp/cimport.h>
 #include <assimp/Importer.hpp>
+#include <assimp/Exporter.hpp>
 #include <assimp/scene.h>
 #include <assimp/postprocess.h>
 
@@ -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;

+ 47 - 17
test/unit/utExport.cpp

@@ -1,38 +1,71 @@
+/*
+---------------------------------------------------------------------------
+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 <assimp/cexport.h>
 #include <assimp/Exporter.hpp>
 
-
 #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
+