Skip to content

Commit

Permalink
Fix UTF check in pcre_grep
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
weltling committed Nov 14, 2017
1 parent 3c241ea commit 0d13323
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions ext/pcre/php_pcre.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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");
Expand Down

0 comments on commit 0d13323

Please sign in to comment.