+ /* pce now contains the compiled regex */
+ zval retval;
+ zval subpats;
-+ char *haystack;
++ zend_string *haystack;
+
+ ZVAL_NULL(&retval);
+ ZVAL_NULL(&subpats);
+
+ /* Cut the search len from haystack, equals to REG_STARTEND */
-+ haystack = estrndup(ms->search.s, ms->search.s_len);
++ haystack = zend_string_init(ms->search.s, ms->search.s_len, 0);
+
+ /* match v = 0, no match v = 1 */
-+ php_pcre_match_impl(pce, haystack, ms->search.s_len, &retval, &subpats, 0, 1, PREG_OFFSET_CAPTURE, 0);
++ php_pcre_match_impl(pce, haystack, &retval, &subpats, 0, 1, PREG_OFFSET_CAPTURE, 0);
+ /* Free haystack */
-+ efree(haystack);
++ zend_string_release(haystack);
+
+ if (Z_LVAL(retval) < 0) {
+ zval_ptr_dtor(&subpats);
/* pce now contains the compiled regex */
zval retval;
zval subpats;
- char *haystack;
+ zend_string *haystack;
ZVAL_NULL(&retval);
ZVAL_NULL(&subpats);
/* Cut the search len from haystack, equals to REG_STARTEND */
- haystack = estrndup(ms->search.s, ms->search.s_len);
+ haystack = zend_string_init(ms->search.s, ms->search.s_len, 0);
/* match v = 0, no match v = 1 */
- php_pcre_match_impl(pce, haystack, ms->search.s_len, &retval, &subpats, 0, 1, PREG_OFFSET_CAPTURE, 0);
+ php_pcre_match_impl(pce, haystack, &retval, &subpats, 0, 1, PREG_OFFSET_CAPTURE, 0);
/* Free haystack */
- efree(haystack);
+ zend_string_release(haystack);
if (Z_LVAL(retval) < 0) {
zval_ptr_dtor(&subpats);
}
zend_string_free(regex);
- php_pcre_match_impl(pce, ZSTR_VAL(internal_date), ZSTR_LEN(internal_date), return_value, subpats, global,
+ php_pcre_match_impl(pce, internal_date, return_value, subpats, global,
0, Z_L(0), Z_L(0));
if (!Z_LVAL_P(return_value)) {
}
pce->refcount++;
- php_pcre_match_impl(pce, ZSTR_VAL(subject), ZSTR_LEN(subject), return_value, subpats,
+ php_pcre_match_impl(pce, subject, return_value, subpats,
global, ZEND_NUM_ARGS() >= 4, flags, start_offset);
pce->refcount--;
}
/* }}} */
/* {{{ php_pcre_match_impl() */
-PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, size_t subject_len, zval *return_value,
+PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, zend_string *subject_str, zval *return_value,
zval *subpats, int global, int use_flags, zend_long flags, zend_off_t start_offset)
{
zval result_set, /* Holds a set of subpatterns after
pcre2_match_data *match_data;
PCRE2_SIZE start_offset2;
+ char *subject = ZSTR_VAL(subject_str);
+ size_t subject_len = ZSTR_LEN(subject_str);
+
ZVAL_UNDEF(&marks);
/* Overwrite the passed-in value for subpatterns with an empty array. */
PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex);
-PHPAPI void php_pcre_match_impl( pcre_cache_entry *pce, char *subject, size_t subject_len, zval *return_value,
+PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, zend_string *subject_str, zval *return_value,
zval *subpats, int global, int use_flags, zend_long flags, zend_off_t start_offset);
PHPAPI zend_string *php_pcre_replace_impl(pcre_cache_entry *pce, zend_string *subject_str, char *subject, size_t subject_len, zend_string *replace_str,
case REGIT_MODE_GET_MATCH:
zval_ptr_dtor(&intern->current.data);
ZVAL_UNDEF(&intern->current.data);
- php_pcre_match_impl(intern->u.regex.pce, ZSTR_VAL(subject), ZSTR_LEN(subject), &zcount,
+ php_pcre_match_impl(intern->u.regex.pce, subject, &zcount,
&intern->current.data, intern->u.regex.mode == REGIT_MODE_ALL_MATCHES, intern->u.regex.use_flags, intern->u.regex.preg_flags, 0);
RETVAL_BOOL(Z_LVAL(zcount) > 0);
break;