From 415000ed93c6811cbceae3344d76ec63dbd7fff3 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 24 Sep 2015 16:42:59 +0300 Subject: [PATCH] Fixed bug #70573 (Cloning SplPriorityQueue leads to memory leaks) --- NEWS | 3 +++ ext/spl/spl_heap.c | 6 ------ ext/spl/tests/bug70573.phpt | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 ext/spl/tests/bug70573.phpt diff --git a/NEWS b/NEWS index 92230eabdb6..76c2943dad3 100644 --- a/NEWS +++ b/NEWS @@ -43,6 +43,9 @@ PHP NEWS - SQLite3: . Fixed bug #70571 (Memory leak in sqlite3_do_callback). (Adam) +-SPL: + . Fixed bug #70573 (Cloning SplPriorityQueue leads to memory leaks). (Dmitry) + - XMLRPC . Fixed bug #70526 (xmlrpc_set_type returns false on success). (Laruence) diff --git a/ext/spl/spl_heap.c b/ext/spl/spl_heap.c index ad520f948a7..ddcfbb1168d 100644 --- a/ext/spl/spl_heap.c +++ b/ext/spl/spl_heap.c @@ -378,13 +378,7 @@ static zend_object *spl_heap_object_new_ex(zend_class_entry *class_type, zval *o intern->ce_get_iterator = other->ce_get_iterator; if (clone_orig) { - int i; intern->heap = spl_ptr_heap_clone(other->heap); - for (i = 0; i < intern->heap->count; ++i) { - if (Z_REFCOUNTED(intern->heap->elements[i])) { - Z_ADDREF(intern->heap->elements[i]); - } - } } else { intern->heap = other->heap; } diff --git a/ext/spl/tests/bug70573.phpt b/ext/spl/tests/bug70573.phpt new file mode 100644 index 00000000000..b93e48876d7 --- /dev/null +++ b/ext/spl/tests/bug70573.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #70573 (Cloning SplPriorityQueue leads to memory leaks) +--FILE-- +insert([$a], 1); +$q1->insert([$a], 2); +$q2 = clone $q1; +echo "ok\n"; +?> +--EXPECT-- +ok + +