add: galloc: free: check if the ptr is valid

This commit is contained in:
starnakin 2023-07-23 19:38:40 +02:00
parent c688cfc4b1
commit 1d9de5df65
2 changed files with 9 additions and 2 deletions

View File

@ -144,6 +144,11 @@ free(ptr)
local first_block; local first_block;
local last_block; local last_block;
if (ptr > heap + HEAP_SIZE | heap > ptr)
{
putstr("Error: free: invalid ptr\n");
return;
}
block = ptr - LOCATION_DATA; block = ptr - LOCATION_DATA;
prev_block = [block + LOCATION_PREV]; prev_block = [block + LOCATION_PREV];
if (prev_block == 0 | [prev_block + LOCATION_USED]) if (prev_block == 0 | [prev_block + LOCATION_USED])
@ -160,5 +165,5 @@ free(ptr)
leaks() leaks()
{ {
return (heap + LOCATION_NEXT != NULL); return ([heap + LOCATION_NEXT] != 0);
} }

View File

@ -16,7 +16,9 @@ main()
ptr2 = galloc(0x9000); ptr2 = galloc(0x9000);
test_num(ptr2, 0, "alloc too big"); test_num(ptr2, 0, "alloc too big");
free(ptr2);
test_num(leaks(), 0, "leaks");
ptr1 = galloc(1);
test_num(leaks(), 1, "leaks"); test_num(leaks(), 1, "leaks");
free(ptr1);
} }