cvs: php-src /ext/spl spl_iterators.c spl_iterators.h
| From: | Marcus Boerger | Date: | Wed, 12 Oct 2005 22:52:15 +0000 |
| Subject: | cvs: php-src /ext/spl spl_iterators.c spl_iterators.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-34560@lists.php.net to get a copy of this message | ||
helly Wed Oct 12 18:52:15 2005 EDT
Modified files:
/php-src/ext/spl spl_iterators.c spl_iterators.h
Log:
- Use pcre_cache_entry* rather than pcre* directly for refcounting
# This prevents a theoretical crash when using too many regexes
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.91&r2=1.92&ty=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.91 php-src/ext/spl/spl_iterators.c:1.92
--- php-src/ext/spl/spl_iterators.c:1.91 Mon Oct 10 20:18:31 2005
+++ php-src/ext/spl/spl_iterators.c Wed Oct 12 18:52:08 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.c,v 1.91 2005/10/11 00:18:31 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.92 2005/10/12 22:52:08 helly Exp $ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -903,16 +903,16 @@
case DIT_RegExIterator:
case DIT_RecursiveRegExIterator: {
char *regex;
- int len;
+ int len, poptions, coptions;
+ pcre_extra *extra;
intern->u.regex.flags = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Os|l", &zobject, ce_inner,
®ex, &len, &intern->u.regex.flags) == FAILURE) {
php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
return NULL;
}
- intern->u.regex.extra = NULL;
- intern->u.regex.options = 0;
- intern->u.regex.re = pcre_get_compiled_regex(regex, &intern->u.regex.extra,
&intern->u.regex.options TSRMLS_CC);
+ intern->u.regex.pce = pcre_get_compiled_regex_cache(regex, len, &extra, &poptions,
&coptions TSRMLS_CC);
+ intern->u.regex.pce->refcount++;
break;;
}
#endif
@@ -1265,6 +1265,7 @@
char *subject, tmp[32];
int subject_len, use_copy = 0;
zval subject_copy;
+ pcre_extra *extra;
intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
@@ -1287,7 +1288,8 @@
}
}
- count = pcre_exec(intern->u.regex.re, intern->u.regex.extra, subject, subject_len, 0, 0,
NULL, 0);
+ extra = intern->u.regex.pce->extra;
+ count = pcre_exec(intern->u.regex.pce->re, extra, subject, subject_len, 0, 0, NULL, 0);
if (use_copy) {
zval_dtor(&subject_copy);
@@ -1331,10 +1333,10 @@
}
}
-#if MBO_0
+#if HAVE_PCRE || HAVE_BUNDLED_PCRE
if (object->dit_type == DIT_RegExIterator || object->dit_type == DIT_RecursiveRegExIterator)
{
- if (object->u.regex.re) {
- /* actually there's no way to get rid of this early */
+ if (object->u.regex.pce) {
+ object->u.regex.pce->refcount--;
}
}
#endif
http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.h?r1=1.26&r2=1.27&ty=u
Index: php-src/ext/spl/spl_iterators.h
diff -u php-src/ext/spl/spl_iterators.h:1.26 php-src/ext/spl/spl_iterators.h:1.27
--- php-src/ext/spl/spl_iterators.h:1.26 Mon Oct 10 20:18:31 2005
+++ php-src/ext/spl/spl_iterators.h Wed Oct 12 18:52:09 2005
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: spl_iterators.h,v 1.26 2005/10/11 00:18:31 helly Exp $ */
+/* $Id: spl_iterators.h,v 1.27 2005/10/12 22:52:09 helly Exp $ */
#ifndef SPL_ITERATORS_H
#define SPL_ITERATORS_H
@@ -125,9 +125,7 @@
#if HAVE_PCRE || HAVE_BUNDLED_PCRE
struct {
int flags;
- pcre *re;
- pcre_extra *extra;
- int options;
+ pcre_cache_entry *pce;
} regex;
#endif
} u;