From ee7a77db65f24b3e34a9b9b733887cab3434d225 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Tue, 9 Apr 2019 15:12:28 -0700 Subject: [PATCH] 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. --- py/gc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/py/gc.c b/py/gc.c index 246df15031..e0439e9450 100755 --- a/py/gc.c +++ b/py/gc.c @@ -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);