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