1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 00:47:45 +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,10 +38,12 @@ public:
explicit FixedArray(size_t size) explicit FixedArray(size_t size)
: m_size(size) : m_size(size)
{ {
if (m_size != 0) {
m_elements = (T*)kmalloc(sizeof(T) * m_size); m_elements = (T*)kmalloc(sizeof(T) * m_size);
for (size_t i = 0; i < m_size; ++i) for (size_t i = 0; i < m_size; ++i)
new (&m_elements[i]) T(); new (&m_elements[i]) T();
} }
}
~FixedArray() ~FixedArray()
{ {
clear(); clear();
@ -50,10 +52,12 @@ public:
FixedArray(const FixedArray& other) FixedArray(const FixedArray& other)
: m_size(other.m_size) : m_size(other.m_size)
{ {
if (m_size != 0) {
m_elements = (T*)kmalloc(sizeof(T) * m_size); m_elements = (T*)kmalloc(sizeof(T) * m_size);
for (size_t i = 0; i < m_size; ++i) for (size_t i = 0; i < m_size; ++i)
new (&m_elements[i]) T(other[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]));