LibVideo: Do not invoke Vector2D's destructor in order to resize it

This leads to all kinds of undefined behavior, especially when callers
have a view into the Vector2D.
This commit is contained in:
Timothy Flynn 2023-04-24 11:25:14 -04:00 committed by Andreas Kling
parent 683c8284cf
commit 8b7c5db186
Notes: sideshowbarker 2024-07-16 23:57:20 +09:00

View File

@ -103,17 +103,14 @@ class Vector2D {
public:
~Vector2D()
{
if (m_storage)
free(m_storage);
m_storage = nullptr;
m_width = 0;
m_height = 0;
clear_storage();
}
ErrorOr<void> try_resize(u32 height, u32 width)
{
if (height != m_height && width != m_width) {
this->~Vector2D();
clear_storage();
size_t size = height * width;
auto* new_storage = static_cast<T*>(malloc(size * sizeof(T)));
if (!new_storage)
@ -195,6 +192,15 @@ public:
}
private:
void clear_storage()
{
if (m_storage)
free(m_storage);
m_storage = nullptr;
m_width = 0;
m_height = 0;
}
u32 m_height { 0 };
u32 m_width { 0 };
T* m_storage { nullptr };