Re: [PATCH] Fix segfault in filter extension when using callbacks
| From: | Arnar Mar Sig | Date: | Sun, 24 Feb 2008 15:48:50 +0000 |
| Subject: | Re: [PATCH] Fix segfault in filter extension when using callbacks | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-35769@lists.php.net to get a copy of this message | ||
Erm, the attachement got stripped away, heres the patch..
--- php-5.2.5/ext/filter/filter.c 2007-04-04 20:50:26.000000000 +0000
+++ php-5.2.5-fixed/ext/filter/filter.c 2008-02-24 15:14:19.000000000 +0000
@@ -322,7 +322,7 @@
filter_func.function(*value, flags, options, charset TSRMLS_CC);
if (
- options &&
+ options && (Z_TYPE_P(options) == IS_ARRAY || Z_TYPE_P(options) == IS_OBJECT) &&
((flags & FILTER_NULL_ON_FAILURE && Z_TYPE_PP(value) == IS_NULL) ||
(!(flags & FILTER_NULL_ON_FAILURE) && Z_TYPE_PP(value) == IS_BOOL && Z_LVAL_PP(value) == 0)) &&
zend_hash_exists(HASH_OF(options), "default", sizeof("default"))
Arnar Mar Sig
On Feb 24, 2008, at 3:37 PM, Arnar Mar Sig wrote:
The filter extensinon will segfault if a callback filter returns FALSE, this little patch fixes that. There is also no way to set default value if the callback fails because of a design flow. When dealing with callbacks the 'options' key in the options parameters just be a valid callback, but to set a default value then this key must be a array that includes the key 'default'. Test case: function filter_test($str) { return FALSE; } var_dump(filter_var('durty/boy', FILTER_CALLBACK, array( 'options' => 'filter_test', ))); Arnar Mar Sig --PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php