]> granicus.if.org Git - php/commitdiff
Fixed bug #75089 (preg_grep() is not reporting PREG_BAD_UTF8_ERROR after first input...
authorDmitry Stogov <dmitry@zend.com>
Fri, 18 Aug 2017 11:56:28 +0000 (14:56 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 18 Aug 2017 11:56:28 +0000 (14:56 +0300)
NEWS
ext/pcre/php_pcre.c
ext/pcre/tests/bug75089.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 5bc93fad6b9914edb0c2cd529c1c34f1de9f66cb..614e74e3a69dcd3b3c409e02f92c151578b6d5b0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? ??? ????, PHP 7.2.0RC1
 
+- PCRE:
+  . Fixed bug #75089 (preg_grep() is not reporting PREG_BAD_UTF8_ERROR after
+    first input string). (Dmitry)
 
 17 Aug 2017, PHP 7.2.0beta3
 
index 750e720d749eeb5452548e67a8cb227329dd6f59..44b5ff55b03ebaf385c7fe50c1b8e2b57ff8696b 100644 (file)
@@ -2537,7 +2537,7 @@ PHPAPI void  php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
        int                             *offsets;                       /* Array of subpattern offsets */
        int                              size_offsets;          /* Size of the offsets array */
        int                              count = 0;                     /* Count of matched subpatterns */
-       int                              no_utf_check = 0;      /* Execution options */
+       int                              no_utf_check;          /* Execution options */
        zend_string             *string_key;
        zend_ulong               num_key;
        zend_bool                invert;                        /* Whether to return non-matching
@@ -2569,18 +2569,13 @@ PHPAPI void  php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
 
        PCRE_G(error_code) = PHP_PCRE_NO_ERROR;
 
-#ifdef HAVE_PCRE_JIT_SUPPORT
-       if (!(pce->compile_options & PCRE_UTF8)) {
-               no_utf_check = PCRE_NO_UTF8_CHECK;
-       }
-#endif
-
        /* Go through the input array */
        ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(input), num_key, string_key, entry) {
                zend_string *subject_str = zval_get_string(entry);
 
                /* Perform the match */
 #ifdef HAVE_PCRE_JIT_SUPPORT
+               no_utf_check = (pce->compile_options & PCRE_UTF8) ? 0 : PCRE_NO_UTF8_CHECK;
                if ((extra->flags & PCRE_EXTRA_EXECUTABLE_JIT)
                 && no_utf_check) {
                        count = pcre_jit_exec(pce->re, extra, ZSTR_VAL(subject_str),
diff --git a/ext/pcre/tests/bug75089.phpt b/ext/pcre/tests/bug75089.phpt
new file mode 100644 (file)
index 0000000..dd0ec16
--- /dev/null
@@ -0,0 +1,9 @@
+--TEST--
+Bug #75089 (preg_grep() is not reporting PREG_BAD_UTF8_ERROR after first input string)
+--FILE--
+<?php
+preg_grep('#\d#u', ['a', "1\xFF"/*, 'c'*/]);
+var_dump(preg_last_error());
+?>
+--EXPECT--
+int(4)