Check that a never free pointer is on the heap.

This fixes a crash on boards with built-in displays which statically
allocate the display bus. When the pointer is provided to never
free, it tries to allocate on the non-existant heap and crashes.
This commit is contained in:
Scott Shawcroft 2019-04-09 15:12:28 -07:00
parent 9026f13a25
commit ee7a77db65
No known key found for this signature in database
GPG Key ID: FD0EDC4B6C53CA59

View File

@ -945,6 +945,10 @@ void *gc_realloc(void *ptr_in, size_t n_bytes, bool allow_move) {
#endif // Alternative gc_realloc impl
bool gc_never_free(void *ptr) {
// Check to make sure the pointer is on the heap in the first place.
if (gc_nbytes(ptr) == 0) {
return false;
}
// Pointers are stored in a linked list where each block is BYTES_PER_BLOCK long and the first
// pointer is the next block of pointers.
void ** current_reference_block = MP_STATE_MEM(permanent_pointers);