From: Nikita Popov Date: Thu, 15 Nov 2018 20:34:02 +0000 (+0100) Subject: Fix leaks X-Git-Tag: php-7.4.0alpha1~1532 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2766a8e66bb6bb9baa3ac5da276bcf995101a50c;p=php Fix leaks For some reason I'm no longer getting memory leak errors for my local build :/ --- diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c index 8e644df76e..0993cd4b5e 100644 --- a/ext/spl/spl_heap.c +++ b/ext/spl/spl_heap.c @@ -105,10 +105,12 @@ static void spl_ptr_heap_zval_ctor(zval *elem) { /* {{{ */ /* }}} */ static void spl_ptr_heap_pqueue_elem_dtor(zval *zv) { /* {{{ */ - spl_pqueue_elem *elem = Z_PTR_P(zv); - zval_ptr_dtor(&elem->data); - zval_ptr_dtor(&elem->priority); - efree(elem); + if (!Z_ISUNDEF_P(zv)) { + spl_pqueue_elem *elem = Z_PTR_P(zv); + zval_ptr_dtor(&elem->data); + zval_ptr_dtor(&elem->priority); + efree(elem); + } } /* }}} */ @@ -702,6 +704,7 @@ SPL_METHOD(SplPriorityQueue, extract) } spl_pqueue_extract_helper(return_value, &value, intern->flags); + spl_ptr_heap_pqueue_elem_dtor(&value); } /* }}} */ @@ -958,8 +961,7 @@ static void spl_heap_it_move_forward(zend_object_iterator *iter) /* {{{ */ } spl_ptr_heap_delete_top(object->heap, &elem, &iter->data); - - zval_ptr_dtor(&elem); + object->heap->dtor(&elem); zend_user_it_invalidate_current(iter); } @@ -985,13 +987,13 @@ SPL_METHOD(SplHeap, next) { spl_heap_object *intern = Z_SPLHEAP_P(ZEND_THIS); zval elem; - spl_ptr_heap_delete_top(intern->heap, &elem, ZEND_THIS); if (zend_parse_parameters_none() == FAILURE) { return; } - zval_ptr_dtor(&elem); + spl_ptr_heap_delete_top(intern->heap, &elem, ZEND_THIS); + intern->heap->dtor(&elem); } /* }}} */