Handle NULL pointers in w32heap.c allocation routines
* src/w32heap.c (FREEABLE_P): Consider a NULL pointer "not freeable". (realloc_after_dump, realloc_before_dump, free_before_dump): Handle NULL pointers gracefully, as Emacs now seems to expect that.
This commit is contained in:
parent
3266513eb7
commit
094d5e9ef0
1 changed files with 11 additions and 7 deletions
|
@ -305,9 +305,10 @@ init_heap (void)
|
|||
#undef free
|
||||
|
||||
/* FREEABLE_P checks if the block can be safely freed. */
|
||||
#define FREEABLE_P(addr) \
|
||||
((unsigned char *)(addr) < dumped_data \
|
||||
|| (unsigned char *)(addr) >= dumped_data + DUMPED_HEAP_SIZE)
|
||||
#define FREEABLE_P(addr) \
|
||||
((unsigned char *)(addr) > 0 \
|
||||
&& ((unsigned char *)(addr) < dumped_data \
|
||||
|| (unsigned char *)(addr) >= dumped_data + DUMPED_HEAP_SIZE))
|
||||
|
||||
void *
|
||||
malloc_after_dump (size_t size)
|
||||
|
@ -407,10 +408,10 @@ realloc_after_dump (void *ptr, size_t size)
|
|||
/* If the block lies in the dumped data, do not free it. Only
|
||||
allocate a new one. */
|
||||
p = HeapAlloc (heap, 0, size);
|
||||
if (p)
|
||||
CopyMemory (p, ptr, size);
|
||||
else
|
||||
if (!p)
|
||||
errno = ENOMEM;
|
||||
else if (ptr)
|
||||
CopyMemory (p, ptr, size);
|
||||
}
|
||||
/* After dump, keep track of the "brk value" for sbrk(0). */
|
||||
if (p)
|
||||
|
@ -449,7 +450,7 @@ realloc_before_dump (void *ptr, size_t size)
|
|||
of failing the call as below. But this doesn't seem to be
|
||||
worth the added complexity, as loadup allocates only a very
|
||||
small number of large blocks, and never reallocates them. */
|
||||
if (p)
|
||||
if (p && ptr)
|
||||
{
|
||||
CopyMemory (p, ptr, size);
|
||||
free_before_dump (ptr);
|
||||
|
@ -473,6 +474,9 @@ free_after_dump (void *ptr)
|
|||
void
|
||||
free_before_dump (void *ptr)
|
||||
{
|
||||
if (!ptr)
|
||||
return;
|
||||
|
||||
/* Before dumping. */
|
||||
if (dumped_data < (unsigned char *)ptr
|
||||
&& (unsigned char *)ptr < bc_limit)
|
||||
|
|
Loading…
Add table
Reference in a new issue