]> granicus.if.org Git - php/commitdiff
Fix UTF check in pcre_grep
authorAnatol Belski <ab@php.net>
Tue, 14 Nov 2017 12:49:06 +0000 (13:49 +0100)
committerAnatol Belski <ab@php.net>
Tue, 14 Nov 2017 12:49:06 +0000 (13:49 +0100)
In this case it loops through different subjects without looking for sub
matches and matches are done against the same pattern. Thus, don't reset
the UTF check flag but use it to check whether JIT should be used and
otherwise let PCRE to do the job according to what was saved into the
pattern.

ext/pcre/php_pcre.c

index c71335fe263b97abfc0f679d4d39ff8032093e1d..54fd90f3829b0d549e254c52f634b59660a5f639 100644 (file)
@@ -2569,13 +2569,16 @@ 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
+       no_utf_check = (pce->compile_options & PCRE_UTF8) ? 0 : 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),
@@ -2587,9 +2590,6 @@ PHPAPI void  php_pcre_grep_impl(pcre_cache_entry *pce, zval *input, zval *return
                                                  (int)ZSTR_LEN(subject_str), 0,
                                                  no_utf_check, offsets, size_offsets);
 
-               /* the string was already proved to be valid UTF-8 */
-               no_utf_check = PCRE_NO_UTF8_CHECK;
-
                /* Check for too many substrings condition. */
                if (count == 0) {
                        php_error_docref(NULL, E_NOTICE, "Matched, but too many substrings");