com php-src: Fixed #74977 - Appending AppendIterator leads to segfault: NEWS ext/spl/spl_iterators.c ext/spl/tests/bug749 77.phpt

From: Date: Tue, 25 Jul 2017 05:39:50 +0000
Subject: com php-src: Fixed #74977 - Appending AppendIterator leads to segfault: NEWS ext/spl/spl_iterators.c ext/spl/tests/bug749 77.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-98781@lists.php.net to get a copy of this message
Commit: dbc2ffba822d13e74e37f5ba6e106f163c1008e8 Author: andrewnester <andrew.nester.dev@gmail.com> Mon, 24 Jul 2017 18:41:02 +0300 Committer: Joe Watkins <krakjoe@php.net> Tue, 25 Jul 2017 06:39:50 +0100 Parents: bedd881da6ba60e555a64dfe1447ab0e07f4cdfe Branches: PHP-7..1 PHP-7.2 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=dbc2ffba822d13e74e37f5ba6e106f163c1008e8 Log: Fixed #74977 - Appending AppendIterator leads to segfault Bugs: https://bugs.php.net/74977 Changed paths: M NEWS M ext/spl/spl_iterators.c A ext/spl/tests/bug74977.phpt Diff: diff --git a/NEWS b/NEWS index c00851f..539c849 100644 --- a/NEWS +++ b/NEWS @@ -24,6 +24,8 @@ PHP NEWS - SPL: . Fixed bug #74669 (Unserialize ArrayIterator broken). (Andrew Nester) + . Fixed bug #74977 (Appending AppendIterator leads to segfault). + (Andrew Nester) 03 Aug 2017, PHP 7.1.8 diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 72e0f2f..772d5ce 100644 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -3366,7 +3366,7 @@ SPL_METHOD(AppendIterator, __construct) Append an iterator */ SPL_METHOD(AppendIterator, append) { - spl_dual_it_object *intern; + spl_dual_it_object *intern, *appender; zval *it; SPL_FETCH_AND_CHECK_DUAL_IT(intern, getThis()); @@ -3378,6 +3378,11 @@ SPL_METHOD(AppendIterator, append) spl_array_iterator_append(&intern->u.append.zarrayit, it); intern->u.append.iterator->funcs->move_forward(intern->u.append.iterator); }else{ + appender = Z_SPLDUAL_IT_P(it); + if (appender->dit_type == DIT_AppendIterator) { + spl_array_iterator_append(&intern->u.append.zarrayit, &appender->u.append.zarrayit); + return; + } spl_array_iterator_append(&intern->u.append.zarrayit, it); } diff --git a/ext/spl/tests/bug74977.phpt b/ext/spl/tests/bug74977.phpt new file mode 100644 index 0000000..09e16ee --- /dev/null +++ b/ext/spl/tests/bug74977.phpt @@ -0,0 +1,13 @@ +--TEST-- +Bug #74977: Recursion leads to crash +--FILE-- +<?php + +$iterator = new AppendIterator(array("A","A","A")); +$iterator->append($iterator); +var_dump($iterator); +?> +--EXPECTF-- +object(AppendIterator)#1 (0) { +} +

« previous php.cvs (#98781) next »