diff options
author | Márcio Almada <marcio3w@gmail.com> | 2016-09-19 12:42:07 -0400 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2016-09-22 12:46:19 +0200 |
commit | 4397306b322dc650a6d931bfecdb64cc56678c08 (patch) | |
tree | e047459db15f6e63d2ff317443e1369e908797b6 /ext/spl | |
parent | 4dd70b6e2f40c0ad85bea761803f2aeeb8ef785a (diff) | |
download | php-git-4397306b322dc650a6d931bfecdb64cc56678c08.tar.gz |
fix bug related to #865
In case USE_KEY flag is active, RegexIterator->accept() should keep it's
old behavior which is to accept keys mapping arrays.
This broke after PHP 5.5 but was not noticed due to lack of tests for USE_KEY.
Diffstat (limited to 'ext/spl')
-rw-r--r-- | ext/spl/spl_iterators.c | 5 | ||||
-rw-r--r-- | ext/spl/tests/bug68128-USE_KEY.phpt | 21 | ||||
-rw-r--r-- | ext/spl/tests/iterator_053.phpt | 17 |
3 files changed, 39 insertions, 4 deletions
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index a023b11829..878e5a10f0 100644 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -2053,13 +2053,14 @@ SPL_METHOD(RegexIterator, accept) if (intern->current.data == NULL) { RETURN_FALSE; - } else if (Z_TYPE_P(intern->current.data) == IS_ARRAY) { - RETURN_FALSE; } if (intern->u.regex.flags & REGIT_USE_KEY) { subject_ptr = intern->current.key; } else { + if (Z_TYPE_P(intern->current.data) == IS_ARRAY) { + RETURN_FALSE; + } subject_ptr = intern->current.data; } diff --git a/ext/spl/tests/bug68128-USE_KEY.phpt b/ext/spl/tests/bug68128-USE_KEY.phpt new file mode 100644 index 0000000000..f5fcdae27f --- /dev/null +++ b/ext/spl/tests/bug68128-USE_KEY.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #68128 - RecursiveRegexIterator raises "Array to string conversion" notice +--FILE-- +<?php + +$arrayIterator = new ArrayIterator(array('key 1' => 'value 1', 'key 2' => ['value 2'])); +$regexIterator = new RegexIterator($arrayIterator, '/^key/', RegexIterator::MATCH, RegexIterator::USE_KEY); + +foreach ($regexIterator as $key => $value) { + var_dump($key, $value); +} + +?> +--EXPECT-- +string(5) "key 1" +string(7) "value 1" +string(5) "key 2" +array(1) { + [0]=> + string(7) "value 2" +} diff --git a/ext/spl/tests/iterator_053.phpt b/ext/spl/tests/iterator_053.phpt index b472523ab6..21c044c1b2 100644 --- a/ext/spl/tests/iterator_053.phpt +++ b/ext/spl/tests/iterator_053.phpt @@ -50,7 +50,7 @@ bool(true) bool(true) bool(true) bool(true) -bool(false) +bool(true) bool(true) bool(true) bool(true) @@ -124,7 +124,20 @@ array(2) { string(1) "4" } } -bool(false) +bool(true) +int(5) +array(2) { + [0]=> + array(1) { + [0]=> + string(1) "5" + } + [1]=> + array(1) { + [0]=> + string(1) "5" + } +} bool(true) int(6) array(2) { |