mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1: Fixed #74977 - Appending AppendIterator leads to segfault
This commit is contained in:
commit
2e8759428b
3 changed files with 21 additions and 1 deletions
2
NEWS
2
NEWS
|
@ -37,6 +37,8 @@ PHP NEWS
|
|||
|
||||
- SPL:
|
||||
. Fixed bug #74669 (Unserialize ArrayIterator broken). (Andrew Nester)
|
||||
. Fixed bug #74977 (Appending AppendIterator leads to segfault).
|
||||
(Andrew Nester)
|
||||
|
||||
- Standard:
|
||||
. Fixed bug #74851 (uniqid() without more_entropy performs badly).
|
||||
|
|
|
@ -3365,7 +3365,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());
|
||||
|
@ -3377,6 +3377,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);
|
||||
}
|
||||
|
||||
|
|
13
ext/spl/tests/bug74977.phpt
Normal file
13
ext/spl/tests/bug74977.phpt
Normal file
|
@ -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) {
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue