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))