ntdll: Take size of the arena from the current pointer before advancing.
diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c index 61b25db..25aefd9 100644 --- a/dlls/ntdll/heap.c +++ b/dlls/ntdll/heap.c
@@ -1613,7 +1613,19 @@ goto HW_end; } - ptr += entry->cbData; /* point to next arena */ + if (((ARENA_INUSE *)ptr - 1)->magic == ARENA_INUSE_MAGIC) + { + ARENA_INUSE *pArena = (ARENA_INUSE *)ptr - 1; + ptr += pArena->size & ARENA_SIZE_MASK; + } + else if (((ARENA_FREE *)ptr - 1)->magic == ARENA_FREE_MAGIC) + { + ARENA_FREE *pArena = (ARENA_FREE *)ptr - 1; + ptr += pArena->size & ARENA_SIZE_MASK; + } + else + ptr += entry->cbData; /* point to next arena */ + if (ptr > (char *)currentheap + currentheap->size - 1) { /* proceed with next subheap */ if (!(currentheap = currentheap->next))