diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2021-02-11 16:14:12 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-02-11 16:14:12 +0100 |
commit | f0b387d1e42a5d7e9f5ebda1bec428fc0e7374be (patch) | |
tree | d8b5a9d5553929526de7df1c4e840888942088cb | |
parent | 1106ff9a0e420e043c2e56c8ca00db85f1b85ee6 (diff) | |
parent | 226395a335c2783085a49d5a8559807a3b14e72f (diff) | |
download | php-git-f0b387d1e42a5d7e9f5ebda1bec428fc0e7374be.tar.gz |
Merge branch 'PHP-8.0'
* PHP-8.0:
Fixed bug #80719
-rw-r--r-- | ext/spl/spl_array.c | 4 | ||||
-rw-r--r-- | ext/spl/tests/arrayObject___construct_error1.phpt | 4 | ||||
-rw-r--r-- | ext/spl/tests/arrayObject_setIteratorClass_error1.phpt | 8 | ||||
-rw-r--r-- | ext/spl/tests/bug80719.phpt | 19 |
4 files changed, 27 insertions, 8 deletions
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 880c3c67db..e01259a30e 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -1133,7 +1133,7 @@ PHP_METHOD(ArrayObject, __construct) spl_array_object *intern; zval *array; zend_long ar_flags = 0; - zend_class_entry *ce_get_iterator = spl_ce_Iterator; + zend_class_entry *ce_get_iterator = spl_ce_ArrayIterator; if (ZEND_NUM_ARGS() == 0) { return; /* nothing to do */ @@ -1184,7 +1184,7 @@ PHP_METHOD(ArrayObject, setIteratorClass) { zval *object = ZEND_THIS; spl_array_object *intern = Z_SPLARRAY_P(object); - zend_class_entry * ce_get_iterator = spl_ce_Iterator; + zend_class_entry *ce_get_iterator = spl_ce_ArrayIterator; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_CLASS(ce_get_iterator) diff --git a/ext/spl/tests/arrayObject___construct_error1.phpt b/ext/spl/tests/arrayObject___construct_error1.phpt index 91ef24f37e..a9fbc9d3b0 100644 --- a/ext/spl/tests/arrayObject___construct_error1.phpt +++ b/ext/spl/tests/arrayObject___construct_error1.phpt @@ -20,6 +20,6 @@ try { ?> --EXPECT-- Bad iterator type: -ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, Exception given(6) +ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, Exception given(6) Non-existent class: -ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, nonExistentClassName given(13) +ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClassName given(13) diff --git a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt index b9ab040a21..9a0e67b605 100644 --- a/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt +++ b/ext/spl/tests/arrayObject_setIteratorClass_error1.phpt @@ -43,7 +43,7 @@ try { ?> --EXPECT-- -string(128) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from Iterator, nonExistentClass given" -string(120) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from Iterator, stdClass given" -string(123) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, nonExistentClass given" -string(115) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from Iterator, stdClass given" +string(133) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given" +string(125) "ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given" +string(128) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, nonExistentClass given" +string(120) "ArrayObject::__construct(): Argument #3 ($iteratorClass) must be a class name derived from ArrayIterator, stdClass given" diff --git a/ext/spl/tests/bug80719.phpt b/ext/spl/tests/bug80719.phpt new file mode 100644 index 0000000000..506b250dae --- /dev/null +++ b/ext/spl/tests/bug80719.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #80719: Iterating after failed ArrayObject::setIteratorClass() causes Segmentation fault +--FILE-- +<?php + +$array = new ArrayObject([42]); +try { + $array->setIteratorClass(FilterIterator::class); +} catch (TypeError $e) { + echo $e->getMessage(), "\n"; +} +foreach ($array as $v) { + var_dump($v); +} + +?> +--EXPECT-- +ArrayObject::setIteratorClass(): Argument #1 ($iteratorClass) must be a class name derived from ArrayIterator, FilterIterator given +int(42) |