Ver Fonte

Fixes a mem leak in aiMetadata::Set

Kim Kulling há 4 anos atrás
pai
commit
79a442f95d
2 ficheiros alterados com 15 adições e 2 exclusões
  1. 4 0
      include/assimp/metadata.h
  2. 11 2
      test/unit/utMetadata.cpp

+ 4 - 0
include/assimp/metadata.h

@@ -350,6 +350,10 @@ struct aiMetadata {
         } else if (nullptr != mValues[index].mData && AI_AIMETADATA == mValues[index].mType) {
             *static_cast<T *>(mValues[index].mData) = value;
         } else {
+            if (nullptr != mValues[index].mData) {
+                delete mValues[index].mData;
+                mValues[index].mData = nullptr;
+            }
             mValues[index].mData = new T(value);
         }
 

+ 11 - 2
test/unit/utMetadata.cpp

@@ -51,11 +51,11 @@ class utMetadata: public ::testing::Test {
 protected:
     aiMetadata *m_data;
 
-    virtual void SetUp() {
+    void SetUp() override {
         m_data = nullptr;
     }
 
-    virtual void TearDown() {
+    void TearDown() override {
         aiMetadata::Dealloc( m_data );
     }
 
@@ -261,3 +261,12 @@ TEST_F( utMetadata, copy_test ) {
         EXPECT_EQ( metaVal, v );
     }
 }
+
+TEST_F( utMetadata, set_test ) {
+    aiMetadata v;
+    const std::string key_bool = "test_bool";
+    v.Set(1, key_bool, true);
+    v.Set(1, key_bool, true);
+    v.Set(1, key_bool, true);
+    v.Set(1, key_bool, true);
+}