]> granicus.if.org Git - php/commitdiff
fixed bug66702 : regexiterator's invert flag doesn't work as expected
authorJoshua Thijssen <jthijssen@noxlogic.nl>
Wed, 12 Feb 2014 20:28:20 +0000 (21:28 +0100)
committerEtienne Kneuss <colder@php.net>
Wed, 9 Apr 2014 09:13:33 +0000 (11:13 +0200)
ext/spl/spl_iterators.c
ext/spl/tests/bug66702.phpt [new file with mode: 0644]

index 251736633002b3c39cc6c6bf15fb816767db9611..047b47f26b3ad8bd76a13d84aed3cf93262afbc6 100644 (file)
@@ -2055,7 +2055,7 @@ SPL_METHOD(RegexIterator, accept)
        }
 
        if (intern->u.regex.flags & REGIT_INVERTED) {
-               RETVAL_BOOL(Z_LVAL_P(return_value));
+               RETVAL_BOOL(Z_LVAL_P(return_value));
        }
 
        if (use_copy) {
@@ -3692,6 +3692,7 @@ PHP_MINIT_FUNCTION(spl_iterators)
 #if HAVE_PCRE || HAVE_BUNDLED_PCRE
        REGISTER_SPL_SUB_CLASS_EX(RegexIterator, FilterIterator, spl_dual_it_new, spl_funcs_RegexIterator);
        REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "USE_KEY",     REGIT_USE_KEY);
+       REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "INVERT_MATCH",REGIT_INVERTED);
        REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "MATCH",       REGIT_MODE_MATCH);
        REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "GET_MATCH",   REGIT_MODE_GET_MATCH);
        REGISTER_SPL_CLASS_CONST_LONG(RegexIterator, "ALL_MATCHES", REGIT_MODE_ALL_MATCHES);
diff --git a/ext/spl/tests/bug66702.phpt b/ext/spl/tests/bug66702.phpt
new file mode 100644 (file)
index 0000000..fedfc86
--- /dev/null
@@ -0,0 +1,40 @@
+--TEST--
+Bug #66702 (RegexIterator inverted result works as expected)
+--FILE--
+<?php
+/**
+ * @author Joshua Thijssen <jthijssen+php@noxlogic.nl>
+ */
+
+$it = new \ArrayIterator(array("foo", "bar", "baz"));
+$it2 = new \RegexIterator($it, "/^ba/", \RegexIterator::MATCH);
+print_r(iterator_to_array($it2));
+$it2 = new \RegexIterator($it, "/^ba/", \RegexIterator::MATCH, \RegexIterator::INVERT_MATCH);
+print_r(iterator_to_array($it2));
+
+$it = new \ArrayIterator(array("foo" => 1, "bar" => 2, "baz" => 3));
+$it2 = new \RegexIterator($it, "/^ba/", \RegexIterator::MATCH, \RegexIterator::USE_KEY);
+print_r(iterator_to_array($it2));
+$it2 = new \RegexIterator($it, "/^ba/", \RegexIterator::MATCH, \RegexIterator::USE_KEY | \RegexIterator::INVERT_MATCH);
+print_r(iterator_to_array($it2));
+
+--EXPECTF--
+Array
+(
+    [1] => bar
+    [2] => baz
+)
+Array
+(
+    [0] => foo
+)
+Array
+(
+    [bar] => 2
+    [baz] => 3
+)
+Array
+(
+    [foo] => 1
+)
+