Skip to content

Commit 275fa53

Browse files
committed
Accept zend_string* instead of char* in php_pcre_match_impl()
1 parent 7ad04a0 commit 275fa53

File tree

6 files changed

+16
-13
lines changed

6 files changed

+16
-13
lines changed

ext/fileinfo/libmagic.patch

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4147,18 +4147,18 @@ diff -u libmagic.orig/softmagic.c libmagic/softmagic.c
41474147
+ /* pce now contains the compiled regex */
41484148
+ zval retval;
41494149
+ zval subpats;
4150-
+ char *haystack;
4150+
+ zend_string *haystack;
41514151
+
41524152
+ ZVAL_NULL(&retval);
41534153
+ ZVAL_NULL(&subpats);
41544154
+
41554155
+ /* Cut the search len from haystack, equals to REG_STARTEND */
4156-
+ haystack = estrndup(ms->search.s, ms->search.s_len);
4156+
+ haystack = zend_string_init(ms->search.s, ms->search.s_len, 0);
41574157
+
41584158
+ /* match v = 0, no match v = 1 */
4159-
+ php_pcre_match_impl(pce, haystack, ms->search.s_len, &retval, &subpats, 0, 1, PREG_OFFSET_CAPTURE, 0);
4159+
+ php_pcre_match_impl(pce, haystack, &retval, &subpats, 0, 1, PREG_OFFSET_CAPTURE, 0);
41604160
+ /* Free haystack */
4161-
+ efree(haystack);
4161+
+ zend_string_release(haystack);
41624162
+
41634163
+ if (Z_LVAL(retval) < 0) {
41644164
+ zval_ptr_dtor(&subpats);

ext/fileinfo/libmagic/softmagic.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2024,18 +2024,18 @@ magiccheck(struct magic_set *ms, struct magic *m)
20242024
/* pce now contains the compiled regex */
20252025
zval retval;
20262026
zval subpats;
2027-
char *haystack;
2027+
zend_string *haystack;
20282028

20292029
ZVAL_NULL(&retval);
20302030
ZVAL_NULL(&subpats);
20312031

20322032
/* Cut the search len from haystack, equals to REG_STARTEND */
2033-
haystack = estrndup(ms->search.s, ms->search.s_len);
2033+
haystack = zend_string_init(ms->search.s, ms->search.s_len, 0);
20342034

20352035
/* match v = 0, no match v = 1 */
2036-
php_pcre_match_impl(pce, haystack, ms->search.s_len, &retval, &subpats, 0, 1, PREG_OFFSET_CAPTURE, 0);
2036+
php_pcre_match_impl(pce, haystack, &retval, &subpats, 0, 1, PREG_OFFSET_CAPTURE, 0);
20372037
/* Free haystack */
2038-
efree(haystack);
2038+
zend_string_release(haystack);
20392039

20402040
if (Z_LVAL(retval) < 0) {
20412041
zval_ptr_dtor(&subpats);

ext/imap/php_imap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1356,7 +1356,7 @@ PHP_FUNCTION(imap_append)
13561356
}
13571357

13581358
zend_string_free(regex);
1359-
php_pcre_match_impl(pce, ZSTR_VAL(internal_date), ZSTR_LEN(internal_date), return_value, subpats, global,
1359+
php_pcre_match_impl(pce, internal_date, return_value, subpats, global,
13601360
0, Z_L(0), Z_L(0));
13611361

13621362
if (!Z_LVAL_P(return_value)) {

ext/pcre/php_pcre.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -981,14 +981,14 @@ static void php_do_pcre_match(INTERNAL_FUNCTION_PARAMETERS, int global) /* {{{ *
981981
}
982982

983983
pce->refcount++;
984-
php_pcre_match_impl(pce, ZSTR_VAL(subject), ZSTR_LEN(subject), return_value, subpats,
984+
php_pcre_match_impl(pce, subject, return_value, subpats,
985985
global, ZEND_NUM_ARGS() >= 4, flags, start_offset);
986986
pce->refcount--;
987987
}
988988
/* }}} */
989989

990990
/* {{{ php_pcre_match_impl() */
991-
PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, size_t subject_len, zval *return_value,
991+
PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, zend_string *subject_str, zval *return_value,
992992
zval *subpats, int global, int use_flags, zend_long flags, zend_off_t start_offset)
993993
{
994994
zval result_set, /* Holds a set of subpatterns after
@@ -1010,6 +1010,9 @@ PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, char *subject, size_t sub
10101010
pcre2_match_data *match_data;
10111011
PCRE2_SIZE start_offset2;
10121012

1013+
char *subject = ZSTR_VAL(subject_str);
1014+
size_t subject_len = ZSTR_LEN(subject_str);
1015+
10131016
ZVAL_UNDEF(&marks);
10141017

10151018
/* Overwrite the passed-in value for subpatterns with an empty array. */

ext/pcre/php_pcre.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ typedef struct _pcre_cache_entry pcre_cache_entry;
4545

4646
PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex);
4747

48-
PHPAPI void php_pcre_match_impl( pcre_cache_entry *pce, char *subject, size_t subject_len, zval *return_value,
48+
PHPAPI void php_pcre_match_impl(pcre_cache_entry *pce, zend_string *subject_str, zval *return_value,
4949
zval *subpats, int global, int use_flags, zend_long flags, zend_off_t start_offset);
5050

5151
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,

ext/spl/spl_iterators.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2050,7 +2050,7 @@ SPL_METHOD(RegexIterator, accept)
20502050
case REGIT_MODE_GET_MATCH:
20512051
zval_ptr_dtor(&intern->current.data);
20522052
ZVAL_UNDEF(&intern->current.data);
2053-
php_pcre_match_impl(intern->u.regex.pce, ZSTR_VAL(subject), ZSTR_LEN(subject), &zcount,
2053+
php_pcre_match_impl(intern->u.regex.pce, subject, &zcount,
20542054
&intern->current.data, intern->u.regex.mode == REGIT_MODE_ALL_MATCHES, intern->u.regex.use_flags, intern->u.regex.preg_flags, 0);
20552055
RETVAL_BOOL(Z_LVAL(zcount) > 0);
20562056
break;

0 commit comments

Comments
 (0)