[Bf-blender-cvs] [bf8597febe2] blender-v3.1-release: BLI: fix memory leak in VectorSet

Jacques Lucke noreply at git.blender.org
Wed Feb 2 13:11:42 CET 2022


Commit: bf8597febe2020e654020ad60e8af35c635c1a9a
Author: Jacques Lucke
Date:   Wed Feb 2 13:11:33 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rBbf8597febe2020e654020ad60e8af35c635c1a9a

BLI: fix memory leak in VectorSet

The leak happened when the vector set had to grow when it
was empty but it had allocated the keys array already.

===================================================================

M	source/blender/blenlib/BLI_vector_set.hh
M	source/blender/blenlib/tests/BLI_vector_set_test.cc

===================================================================

diff --git a/source/blender/blenlib/BLI_vector_set.hh b/source/blender/blenlib/BLI_vector_set.hh
index 0aac96f93bc..ed744d09314 100644
--- a/source/blender/blenlib/BLI_vector_set.hh
+++ b/source/blender/blenlib/BLI_vector_set.hh
@@ -570,6 +570,10 @@ class VectorSet {
     if (this->size() == 0) {
       try {
         slots_.reinitialize(total_slots);
+        if (keys_ != nullptr) {
+          this->deallocate_keys_array(keys_);
+          keys_ = nullptr;
+        }
         keys_ = this->allocate_keys_array(usable_slots);
       }
       catch (...) {
diff --git a/source/blender/blenlib/tests/BLI_vector_set_test.cc b/source/blender/blenlib/tests/BLI_vector_set_test.cc
index c4016ca75e1..fe3130a846f 100644
--- a/source/blender/blenlib/tests/BLI_vector_set_test.cc
+++ b/source/blender/blenlib/tests/BLI_vector_set_test.cc
@@ -271,4 +271,14 @@ TEST(vector_set, LookupKey)
   EXPECT_EQ(set.lookup_key_ptr("a"), set.lookup_key_ptr_as("a"));
 }
 
+TEST(vector_set, GrowWhenEmpty)
+{
+  /* Tests that the internal keys array is freed correctly when growing an empty set. */
+  VectorSet<int> set;
+  set.add(4);
+  set.remove(4);
+  EXPECT_TRUE(set.is_empty());
+  set.reserve(100);
+}
+
 }  // namespace blender::tests



More information about the Bf-blender-cvs mailing list