|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
Patch quick-hack for PCRE related Bug #69864Patch version 2015-06-17 22:03 UTC Return to Bug #69864 | Download this patchThis patch is obsolete Obsoleted by patches: Patch Revisions:Developer: cmb@php.net
ext/pcre/php_pcre.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c
index c3ceb44..1de7938 100644
--- a/ext/pcre/php_pcre.c
+++ b/ext/pcre/php_pcre.c
@@ -187,13 +187,15 @@ static PHP_MSHUTDOWN_FUNCTION(pcre)
/* {{{ static pcre_clean_cache */
static int pcre_clean_cache(zval *data, void *arg)
{
+ /* data is not a zval, but rather the address of a pcre_cache_entry* in PHP 7 */
+ pcre_cache_entry *pce = *((pcre_cache_entry **) data);
int *num_clean = (int *)arg;
- if (*num_clean > 0) {
+ if (*num_clean > 0 && !pce->refcount) {
(*num_clean)--;
- return 1;
+ return ZEND_HASH_APPLY_REMOVE;
} else {
- return 0;
+ return ZEND_HASH_APPLY_KEEP;
}
}
/* }}} */
@@ -1017,14 +1019,17 @@ PHPAPI zend_string *php_pcre_replace(zend_string *regex,
int limit, int *replace_count)
{
pcre_cache_entry *pce; /* Compiled regular expression */
+ zend_string *result;
/* Compile regex or get it from cache. */
if ((pce = pcre_get_compiled_regex_cache(regex)) == NULL) {
return NULL;
}
-
- return php_pcre_replace_impl(pce, subject_str, subject, subject_len, replace_val,
+ pce->refcount++;
+ result = php_pcre_replace_impl(pce, subject_str, subject, subject_len, replace_val,
is_callable_replace, limit, replace_count);
+ pce->refcount--;
+ return result;
}
/* }}} */
|
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Nov 13 02:00:01 2025 UTC |