forked from starnakin/IronGOLEM
add: galloc: free: check if the ptr is valid
This commit is contained in:
parent
c688cfc4b1
commit
1d9de5df65
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user