Test to check external pointer on deallocated objects
This fails an assertion as it reads from a "head" and assumes it is a sizeclass. This leads to accessing memory out of bounds.
This commit is contained in:
@@ -242,6 +242,30 @@ void test_external_pointer_large()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_external_pointer_dealloc_bug()
|
||||||
|
{
|
||||||
|
auto* alloc = ThreadAlloc::get();
|
||||||
|
constexpr size_t count = (SUPERSLAB_SIZE / SLAB_SIZE) * 2;
|
||||||
|
void* allocs[count];
|
||||||
|
|
||||||
|
for (size_t i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
allocs[i] = alloc->alloc(SLAB_SIZE / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 1; i < count; i++)
|
||||||
|
{
|
||||||
|
alloc->dealloc(allocs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
Alloc::external_pointer(allocs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
alloc->dealloc(allocs[0]);
|
||||||
|
}
|
||||||
|
|
||||||
void test_alloc_16M()
|
void test_alloc_16M()
|
||||||
{
|
{
|
||||||
auto* alloc = ThreadAlloc::get();
|
auto* alloc = ThreadAlloc::get();
|
||||||
@@ -264,6 +288,7 @@ int main(int argc, char** argv)
|
|||||||
UNUSED(argv);
|
UNUSED(argv);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
test_external_pointer_dealloc_bug();
|
||||||
test_external_pointer_large();
|
test_external_pointer_large();
|
||||||
test_alloc_dealloc_64k();
|
test_alloc_dealloc_64k();
|
||||||
test_random_allocation();
|
test_random_allocation();
|
||||||
|
|||||||
Reference in New Issue
Block a user