From fbbd7f0d5cc93da83440ad81df81d1eb296a47e1 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 4 Oct 2022 22:11:02 -0500 Subject: [PATCH] Fix: Crash when reininitializing empty generic array Noticed this while developing new code that used GArray. --- source/blender/blenlib/BLI_generic_array.hh | 4 +++- source/blender/blenlib/tests/BLI_generic_array_test.cc | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) 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()); + array.reinitialize(10); + array.as_mutable_span().typed()[9] = 7; + EXPECT_EQ(array.size(), 10); + EXPECT_EQ(array.as_span().typed()[9], 7); +} + } // namespace blender::tests