summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMárcio Almada <marcio3w@gmail.com>2016-09-19 12:42:07 -0400
committerNikita Popov <nikic@php.net>2016-09-22 12:46:19 +0200
commit4397306b322dc650a6d931bfecdb64cc56678c08 (patch)
treee047459db15f6e63d2ff317443e1369e908797b6
parent4dd70b6e2f40c0ad85bea761803f2aeeb8ef785a (diff)
downloadphp-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.
-rw-r--r--ext/spl/spl_iterators.c5
-rw-r--r--ext/spl/tests/bug68128-USE_KEY.phpt21
-rw-r--r--ext/spl/tests/iterator_053.phpt17
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) {