mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-30 12:49:19 +00:00
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:
parent
46e5890152
commit
e1dbf74f15
Notes:
sideshowbarker
2024-07-18 22:22:41 +09:00
Author: https://github.com/awesomekling
Commit: e1dbf74f15
2 changed files with 8 additions and 0 deletions
|
@ -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();
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue