LibJS: Add some basic freelist validation for the GC heap

When using the freelist, we now validate that the entries are actual
cell pointers within the current HeapBlock.
This commit is contained in:
Andreas Kling 2021-02-13 00:17:28 +01:00
commit e1dbf74f15
Notes: sideshowbarker 2024-07-18 22:22:41 +09:00
2 changed files with 8 additions and 0 deletions

View file

@ -75,6 +75,8 @@ HeapBlock::HeapBlock(Heap& heap, size_t cell_size)
void HeapBlock::deallocate(Cell* cell)
{
ASSERT(is_valid_cell_pointer(cell));
ASSERT(!m_freelist || is_valid_cell_pointer(m_freelist));
ASSERT(cell->is_live());
ASSERT(!cell->is_marked());
cell->~Cell();

View file

@ -51,6 +51,7 @@ public:
{
if (!m_freelist)
return nullptr;
ASSERT(is_valid_cell_pointer(m_freelist));
return exchange(m_freelist, m_freelist->next);
}
@ -80,6 +81,11 @@ public:
return cell(cell_index);
}
bool is_valid_cell_pointer(const Cell* cell)
{
return cell_from_possible_pointer((FlatPtr)cell);
}
IntrusiveListNode m_list_node;
private: