PCRE_G(error_code) = PHP_PCRE_NO_ERROR;
- no_utf_check = (pce->compile_options & PCRE_UTF8) ? 0 : PCRE_NO_UTF8_CHECK;
+ if (!mdata_used && num_subpats <= PHP_PCRE_PREALLOC_MDATA_SIZE) {
+ match_data = mdata;
+ } else {
+ match_data = pcre2_match_data_create_from_pattern(pce->re, gctx);
+ if (!match_data) {
+ PCRE_G(error_code) = PHP_PCRE_INTERNAL_ERROR;
+ return;
+ }
+ }
+
+ #ifdef HAVE_PCRE_JIT_SUPPORT
++ no_utf_check = (pce->compile_options & PCRE2_UTF) ? 0 : PCRE2_NO_UTF_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 & PCRE2_UTF) ? 0 : PCRE2_NO_UTF_CHECK;
- if ((extra->flags & PCRE_EXTRA_EXECUTABLE_JIT)
+ if (PCRE_G(jit) && (pce->preg_options && PREG_JIT)
&& no_utf_check) {
- count = pcre_jit_exec(pce->re, extra, ZSTR_VAL(subject_str),
- (int)ZSTR_LEN(subject_str), 0,
- no_utf_check, offsets, size_offsets, jit_stack);
+ count = pcre2_jit_match(pce->re, ZSTR_VAL(subject_str), ZSTR_LEN(subject_str), 0,
+ PCRE2_NO_UTF_CHECK, match_data, mctx);
} else
#endif
- count = pcre_exec(pce->re, extra, ZSTR_VAL(subject_str),
- (int)ZSTR_LEN(subject_str), 0,
- no_utf_check, offsets, size_offsets);
+ count = pcre2_match(pce->re, ZSTR_VAL(subject_str), ZSTR_LEN(subject_str), 0,
+ no_utf_check, match_data, mctx);
- /* the string was already proved to be valid UTF-8 */
- no_utf_check = PCRE2_NO_UTF_CHECK;
-
/* Check for too many substrings condition. */
if (count == 0) {
php_error_docref(NULL, E_NOTICE, "Matched, but too many substrings");