diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2021-02-11 16:13:56 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2021-02-11 16:13:56 +0100 |
commit | 226395a335c2783085a49d5a8559807a3b14e72f (patch) | |
tree | a51872fb949bd3527eef587e47b4f8d710b049e3 /ext/spl | |
parent | 7215261349290ae168e7c1e351d3c655d34b6a0b (diff) | |
parent | c34c5234678a5898c1796983e9ca8faa293f3fe3 (diff) | |
download | php-git-226395a335c2783085a49d5a8559807a3b14e72f.tar.gz |
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4:
Fixed bug #80719
Diffstat (limited to 'ext/spl')
-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 3942366fa0..20a9d9e3da 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -1175,7 +1175,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 */ @@ -1226,7 +1226,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) |