Ver Fonte

Merge branch 'master' into master

Kim Kulling há 2 anos atrás
pai
commit
3f66b92797

+ 0 - 4
code/AssetLib/ASE/ASELoader.cpp

@@ -87,10 +87,6 @@ ASEImporter::ASEImporter() :
     // empty
 }
 
-// ------------------------------------------------------------------------------------------------
-// Destructor, private as well
-ASEImporter::~ASEImporter() = default;
-
 // ------------------------------------------------------------------------------------------------
 // Returns whether the class can handle the format of the given file.
 bool ASEImporter::CanRead(const std::string &pFile, IOSystem *pIOHandler, bool /*checkSig*/) const {

+ 1 - 1
code/AssetLib/ASE/ASELoader.h

@@ -62,7 +62,7 @@ namespace Assimp {
 class ASEImporter : public BaseImporter {
 public:
     ASEImporter();
-    ~ASEImporter() override;
+    ~ASEImporter() override = default;
 
     // -------------------------------------------------------------------
     /** Returns whether the class can handle the format of the given file.

+ 7 - 1
code/AssetLib/ASE/ASEParser.cpp

@@ -1774,7 +1774,13 @@ void Parser::ParseLV4MeshFace(ASE::Face &out) {
         // FIX: There needn't always be a value, sad but true
         while (true) {
             if (*filePtr < '9' && *filePtr >= '0') {
-                out.iSmoothGroup |= (1 << strtoul10(filePtr, &filePtr));
+                uint32_t value = strtoul10(filePtr, &filePtr);
+                if (value < 32) {
+                    out.iSmoothGroup |= (1 << strtoul10(filePtr, &filePtr));
+                } else {
+                    const std::string message = std::string("Unable to set smooth group, value with ") + ai_to_string(value) + std::string(" out of range");
+                    LogWarning(message.c_str());
+                }
             }
             SkipSpaces(&filePtr);
             if (',' != *filePtr) {

+ 3 - 6
code/AssetLib/ASE/ASEParser.h

@@ -4,7 +4,6 @@ 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,
@@ -385,12 +384,10 @@ struct Dummy : public BaseNode {
 /** \brief Class to parse ASE files
  */
 class Parser {
-private:
-    Parser() AI_NO_EXCEPT {
-        // empty
-    }
-
 public:
+    /// @brief No default constructor.
+    Parser() = delete;
+
     // -------------------------------------------------------------------
     //! Construct a parser from a given input file which is
     //! guaranteed to be terminated with zero.

+ 7 - 5
code/AssetLib/MDL/MDLLoader.cpp

@@ -405,11 +405,13 @@ void MDLImporter::InternReadFile_Quake1() {
                 }
                 // go to the end of the skin section / the beginning of the next skin
                 bool overflow = false;
-                if ((pcHeader->skinheight > INT_MAX / pcHeader->skinwidth) || (pcHeader->skinwidth > INT_MAX / pcHeader->skinheight)){
-                    overflow = true;
-                }
-                if (!overflow) {
-                    szCurrent += pcHeader->skinheight * pcHeader->skinwidth +sizeof(float) * iNumImages;
+                if (pcHeader->skinwidth != 0 || pcHeader->skinheight != 0) {
+                    if ((pcHeader->skinheight > INT_MAX / pcHeader->skinwidth) || (pcHeader->skinwidth > INT_MAX / pcHeader->skinheight)){
+                        overflow = true;
+                    }
+                    if (!overflow) {
+                        szCurrent += pcHeader->skinheight * pcHeader->skinwidth +sizeof(float) * iNumImages;
+                    }
                 }
             }
         } else {

+ 10 - 2
test/unit/AssimpAPITest_aiQuaternion.cpp

@@ -120,7 +120,11 @@ TEST_F(AssimpAPITest_aiQuaternion, aiQuaternionMultiplyTest) {
     result_c = result_cpp = random_quat();
     result_cpp = result_cpp * temp;
     aiQuaternionMultiply(&result_c, &temp);
-    EXPECT_EQ(result_cpp, result_c);
+    
+    EXPECT_FLOAT_EQ(result_cpp.x, result_c.x);
+    EXPECT_FLOAT_EQ(result_cpp.y, result_c.y);
+    EXPECT_FLOAT_EQ(result_cpp.z, result_c.z);
+    EXPECT_FLOAT_EQ(result_cpp.w, result_c.w);
 }
 
 TEST_F(AssimpAPITest_aiQuaternion, aiQuaternionInterpolateTest) {
@@ -131,5 +135,9 @@ TEST_F(AssimpAPITest_aiQuaternion, aiQuaternionInterpolateTest) {
     const auto q2 = aiQuaternion(aiVector3D(1,2,1).Normalize(), Math::aiPi<float>() / 2.0f);
     aiQuaternion::Interpolate(result_cpp, q1, q2, INTERPOLATION);
     aiQuaternionInterpolate(&result_c, &q1, &q2, INTERPOLATION);
-    EXPECT_EQ(result_cpp, result_c);
+
+    EXPECT_FLOAT_EQ(result_cpp.x, result_c.x);
+    EXPECT_FLOAT_EQ(result_cpp.y, result_c.y);
+    EXPECT_FLOAT_EQ(result_cpp.z, result_c.z);
+    EXPECT_FLOAT_EQ(result_cpp.w, result_c.w);
 }