Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2022-10-05 06:11:02 +0300
committerHans Goudey <h.goudey@me.com>2022-10-05 06:17:59 +0300
commitfbbd7f0d5cc93da83440ad81df81d1eb296a47e1 (patch)
tree40fa2234d75624ed9530bdd7527e30eb0b1cd676
parentb804f925c70cb7245038c14bede3ede11aed9a37 (diff)
Fix: Crash when reininitializing empty generic array
Noticed this while developing new code that used GArray.
-rw-r--r--source/blender/blenlib/BLI_generic_array.hh4
-rw-r--r--source/blender/blenlib/tests/BLI_generic_array_test.cc9
2 files changed, 12 insertions, 1 deletions
diff --git a/source/blender/blenlib/BLI_generic_array.hh b/source/blender/blenlib/BLI_generic_array.hh
index f0eddd30419..03dc8814309 100644
--- a/source/blender/blenlib/BLI_generic_array.hh
+++ b/source/blender/blenlib/BLI_generic_array.hh
@@ -231,7 +231,9 @@ class GArray {
this->deallocate(new_data);
throw;
}
- this->deallocate(data_);
+ if (this->data_) {
+ this->deallocate(data_);
+ }
data_ = new_data;
}
diff --git a/source/blender/blenlib/tests/BLI_generic_array_test.cc b/source/blender/blenlib/tests/BLI_generic_array_test.cc
index 25e08f59f94..8e32430eede 100644
--- a/source/blender/blenlib/tests/BLI_generic_array_test.cc
+++ b/source/blender/blenlib/tests/BLI_generic_array_test.cc
@@ -114,4 +114,13 @@ TEST(generic_array, InContainer)
}
}
+TEST(generic_array, ReinitEmpty)
+{
+ GArray<> array(CPPType::get<int>());
+ array.reinitialize(10);
+ array.as_mutable_span().typed<int>()[9] = 7;
+ EXPECT_EQ(array.size(), 10);
+ EXPECT_EQ(array.as_span().typed<int>()[9], 7);
+}
+
} // namespace blender::tests