Skip to content

Commit 1a259a0

Browse files
committed
Fixes
1 parent 193962c commit 1a259a0

File tree

1 file changed

+20
-4
lines changed

1 file changed

+20
-4
lines changed

Zend/zend_alloc.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2448,6 +2448,8 @@ static zend_long zend_mm_find_leaks_small(zend_mm_chunk *p, uint32_t i, uint32_t
24482448
dbg = (zend_mm_debug_info*)((char*)dbg + bin_data_size[bin_num]);
24492449
ZEND_MM_UNPOISON_DEBUGINFO(dbg);
24502450
}
2451+
ZEND_MM_POISON_DEBUGINFO(dbg);
2452+
24512453
if (empty) {
24522454
zend_mm_bitset_reset_range(p->free_map, i, bin_pages[bin_num]);
24532455
}
@@ -2482,9 +2484,14 @@ static zend_long zend_mm_find_leaks(zend_mm_heap *heap, zend_mm_chunk *p, uint32
24822484
i++;
24832485
}
24842486
}
2485-
p = p->next;
2487+
zend_mm_chunk *next = p->next;
2488+
ZEND_MM_POISON_CHUNK_HDR(p, heap);
2489+
p = next;
2490+
ZEND_MM_UNPOISON_CHUNK_HDR(p);
2491+
24862492
i = ZEND_MM_FIRST_PAGE;
24872493
} while (p != heap->main_chunk);
2494+
ZEND_MM_POISON_CHUNK_HDR(p, heap);
24882495
return count;
24892496
}
24902497

@@ -2545,6 +2552,7 @@ static void zend_mm_check_leaks(zend_mm_heap *heap)
25452552

25462553
/* for each chunk */
25472554
p = heap->main_chunk;
2555+
ZEND_MM_UNPOISON_CHUNK_HDR(p);
25482556
do {
25492557
i = ZEND_MM_FIRST_PAGE;
25502558
while (i < p->free_tail) {
@@ -2571,8 +2579,12 @@ static void zend_mm_check_leaks(zend_mm_heap *heap)
25712579
dbg->filename = NULL;
25722580
dbg->lineno = 0;
25732581

2574-
repeated = zend_mm_find_leaks_small(p, i, j + 1, &leak) +
2575-
zend_mm_find_leaks(heap, p, i + bin_pages[bin_num], &leak);
2582+
repeated = zend_mm_find_leaks_small(p, i, j + 1, &leak);
2583+
ZEND_MM_UNPOISON_CHUNK_HDR(p);
2584+
2585+
repeated += zend_mm_find_leaks(heap, p, i + bin_pages[bin_num], &leak);
2586+
ZEND_MM_UNPOISON_CHUNK_HDR(p);
2587+
25762588
total += 1 + repeated;
25772589
if (repeated) {
25782590
zend_message_dispatcher(ZMSG_MEMORY_LEAK_REPEATED, (void *)(uintptr_t)repeated);
@@ -2604,6 +2616,7 @@ static void zend_mm_check_leaks(zend_mm_heap *heap)
26042616
zend_mm_bitset_reset_range(p->free_map, i, pages_count);
26052617

26062618
repeated = zend_mm_find_leaks(heap, p, i + pages_count, &leak);
2619+
ZEND_MM_UNPOISON_CHUNK_HDR(p);
26072620
total += 1 + repeated;
26082621
if (repeated) {
26092622
zend_message_dispatcher(ZMSG_MEMORY_LEAK_REPEATED, (void *)(uintptr_t)repeated);
@@ -2614,7 +2627,10 @@ static void zend_mm_check_leaks(zend_mm_heap *heap)
26142627
i++;
26152628
}
26162629
}
2617-
p = p->next;
2630+
zend_mm_chunk *next = p->next;
2631+
ZEND_MM_POISON_CHUNK_HDR(p, heap);
2632+
p = next;
2633+
ZEND_MM_UNPOISON_CHUNK_HDR(p);
26182634
} while (p != heap->main_chunk);
26192635
if (total) {
26202636
zend_message_dispatcher(ZMSG_MEMORY_LEAKS_GRAND_TOTAL, &total);

0 commit comments

Comments
 (0)