Skip to content

Commit f0b387d

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Fixed bug #80719
2 parents 1106ff9 + 226395a commit f0b387d

File tree

4 files changed

+27
-8
lines changed

4 files changed

+27
-8
lines changed

ext/spl/spl_array.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,7 +1133,7 @@ PHP_METHOD(ArrayObject, __construct)
11331133
spl_array_object *intern;
11341134
zval *array;
11351135
zend_long ar_flags = 0;
1136-
zend_class_entry *ce_get_iterator = spl_ce_Iterator;
1136+
zend_class_entry *ce_get_iterator = spl_ce_ArrayIterator;
11371137

11381138
if (ZEND_NUM_ARGS() == 0) {
11391139
return; /* nothing to do */
@@ -1184,7 +1184,7 @@ PHP_METHOD(ArrayObject, setIteratorClass)
11841184
{
11851185
zval *object = ZEND_THIS;
11861186
spl_array_object *intern = Z_SPLARRAY_P(object);
1187-
zend_class_entry * ce_get_iterator = spl_ce_Iterator;
1187+
zend_class_entry *ce_get_iterator = spl_ce_ArrayIterator;
11881188

11891189
ZEND_PARSE_PARAMETERS_START(1, 1)
11901190
Z_PARAM_CLASS(ce_get_iterator)

ext/spl/tests/arrayObject___construct_error1.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ try {
2020
?>
2121
--EXPECT--
2222
Bad iterator type:
23-
ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, Exception given(6)
23+
ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, Exception given(6)
2424
Non-existent class:
25-
ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, nonExistentClassName given(13)
25+
ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClassName given(13)

ext/spl/tests/arrayObject_setIteratorClass_error1.phpt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ try {
4343

4444
?>
4545
--EXPECT--
46-
string(128) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from Iterator, nonExistentClass given"
47-
string(120) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from Iterator, stdClass given"
48-
string(123) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, nonExistentClass given"
49-
string(115) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, stdClass given"
46+
string(133) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given"
47+
string(125) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given"
48+
string(128) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given"
49+
string(120) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given"

ext/spl/tests/bug80719.phpt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
Bug #80719: Iterating after failed ArrayObject::setIteratorClass() causes Segmentation fault
3+
--FILE--
4+
<?php
5+
6+
$array = new ArrayObject([42]);
7+
try {
8+
$array->setIteratorClass(FilterIterator::class);
9+
} catch (TypeError $e) {
10+
echo $e->getMessage(), "\n";
11+
}
12+
foreach ($array as $v) {
13+
var_dump($v);
14+
}
15+
16+
?>
17+
--EXPECT--
18+
ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, FilterIterator given
19+
int(42)

0 commit comments

Comments
 (0)