From 1d144ed6fcc1768a6cce7408bfb633ed7849d847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Wed, 12 Jan 2022 22:28:43 +0100 Subject: [PATCH] AK: Remove clear() from FixedArray and fixate its allocation guarantees FixedArray always *almost* had the following allocation guarantees: There is (possibly) one allocation in the constructor and one (or more) deallocation(s) in the destructor. No other operation allocates or deallocates. With this removal of the public clear() method, which nobody except the test used anyways, those guarantees are now completely true and furthermore fixated with an explanatory comment. --- AK/FixedArray.h | 8 +++----- Tests/AK/TestFixedArray.cpp | 3 --- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/AK/FixedArray.h b/AK/FixedArray.h index e793de8a387..90853997982 100644 --- a/AK/FixedArray.h +++ b/AK/FixedArray.h @@ -14,6 +14,8 @@ namespace AK { +// FixedArray is an Array with a size only known at run-time. +// It guarantees to only allocate when being constructed, and to only deallocate when being destructed. template class FixedArray { public: @@ -68,17 +70,13 @@ public: FixedArray& operator=(FixedArray&&) = delete; ~FixedArray() - { - clear(); - } - - void clear() { if (!m_elements) return; for (size_t i = 0; i < m_size; ++i) m_elements[i].~T(); kfree_sized(m_elements, sizeof(T) * m_size); + // NOTE: should prevent use-after-free early m_size = 0; m_elements = nullptr; } diff --git a/Tests/AK/TestFixedArray.cpp b/Tests/AK/TestFixedArray.cpp index 1558619f796..872f97767b0 100644 --- a/Tests/AK/TestFixedArray.cpp +++ b/Tests/AK/TestFixedArray.cpp @@ -23,7 +23,4 @@ TEST_CASE(ints) EXPECT_EQ(ints[0], 0); EXPECT_EQ(ints[1], 1); EXPECT_EQ(ints[2], 2); - - ints.clear(); - EXPECT_EQ(ints.size(), 0u); }