diff options
author | Anatol Belski <ab@php.net> | 2017-11-14 13:49:06 +0100 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2017-11-14 13:49:06 +0100 |
commit | 0d1332391573c1dc8218094c150cd9efcc7f6aff (patch) | |
tree | e5484cac04af4097843e91b512efb92c80786750 /ext/pcre/php_pcre.c | |
parent | 3c241ea3262250262c63b92176e2eec2435cc6bb (diff) | |
download | php-git-0d1332391573c1dc8218094c150cd9efcc7f6aff.tar.gz |
Fix UTF check in pcre_grep
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.
Diffstat (limited to 'ext/pcre/php_pcre.c')
-rw-r--r-- | ext/pcre/php_pcre.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index c71335fe26..54fd90f382 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -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"); |