1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 00:07:36 +00:00

AK: Fix FixedArray zero bytes allocations

This commit is contained in:
Tom 2020-08-30 09:01:20 -06:00 committed by Andreas Kling
parent f5bc7dbfda
commit 80560d1be3

View file

@ -38,9 +38,11 @@ public:
explicit FixedArray(size_t size) explicit FixedArray(size_t size)
: m_size(size) : m_size(size)
{ {
m_elements = (T*)kmalloc(sizeof(T) * m_size); if (m_size != 0) {
for (size_t i = 0; i < m_size; ++i) m_elements = (T*)kmalloc(sizeof(T) * m_size);
new (&m_elements[i]) T(); for (size_t i = 0; i < m_size; ++i)
new (&m_elements[i]) T();
}
} }
~FixedArray() ~FixedArray()
{ {
@ -50,9 +52,11 @@ public:
FixedArray(const FixedArray& other) FixedArray(const FixedArray& other)
: m_size(other.m_size) : m_size(other.m_size)
{ {
m_elements = (T*)kmalloc(sizeof(T) * m_size); if (m_size != 0) {
for (size_t i = 0; i < m_size; ++i) m_elements = (T*)kmalloc(sizeof(T) * m_size);
new (&m_elements[i]) T(other[i]); for (size_t i = 0; i < m_size; ++i)
new (&m_elements[i]) T(other[i]);
}
} }
FixedArray& operator=(const FixedArray& other) FixedArray& operator=(const FixedArray& other)
@ -106,6 +110,10 @@ public:
{ {
if (new_size == m_size) if (new_size == m_size)
return; return;
if (new_size == 0) {
clear();
return;
}
auto* new_elements = (T*)kmalloc(new_size * sizeof(T)); auto* new_elements = (T*)kmalloc(new_size * sizeof(T));
for (size_t i = 0; i < min(new_size, m_size); ++i) for (size_t i = 0; i < min(new_size, m_size); ++i)
new (&new_elements[i]) T(move(m_elements[i])); new (&new_elements[i]) T(move(m_elements[i]));