]> granicus.if.org Git - php/commitdiff
Fixed incorrect heap corruptiuon detection code
authorDmitry Stogov <dmitry@php.net>
Mon, 13 Nov 2006 10:28:57 +0000 (10:28 +0000)
committerDmitry Stogov <dmitry@php.net>
Mon, 13 Nov 2006 10:28:57 +0000 (10:28 +0000)
Zend/zend_alloc.c

index 9e948760dedd9e0a23a6b30888f17707fa804204..57efe89aff36a356d4dd541578d8dace74b48b3b 100644 (file)
@@ -666,6 +666,15 @@ static long zend_mm_find_leaks(zend_mm_segment *segment, zend_mm_block *b)
 
        p = ZEND_MM_NEXT_BLOCK(b);
        while (1) {
+               if (ZEND_MM_IS_GUARD_BLOCK(p)) {
+                       ZEND_MM_CHECK_MAGIC(p, MEM_BLOCK_GUARD);
+                       segment = segment->next_segment;
+                       if (!segment) {
+                               break;
+                       }
+                       p = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE);
+                       continue;
+               }
                q = ZEND_MM_NEXT_BLOCK(p);
                if (q <= p ||
                    (char*)q > (char*)segment + segment->size ||
@@ -686,14 +695,6 @@ static long zend_mm_find_leaks(zend_mm_segment *segment, zend_mm_block *b)
                            zend_mm_panic("zend_mm_heap corrupted");
                        }
                }
-               if (ZEND_MM_IS_GUARD_BLOCK(q)) {
-                       ZEND_MM_CHECK_MAGIC(q, MEM_BLOCK_GUARD);
-                       segment = segment->next_segment;
-                       if (!segment) {
-                               break;
-                       }
-                       q = (zend_mm_block *) ((char *) segment + ZEND_MM_ALIGNED_SEGMENT_SIZE);
-               }
                p = q;
        }
        return leaks;