From 17bc1d09e841ac8198cccf03430689780fd40f83 Mon Sep 17 00:00:00 2001 From: Derick Rethans <derick@php.net> Date: Tue, 4 Oct 2005 14:47:30 +0000 Subject: [PATCH] - Implemented user level data filter. - Fixed a memory leak. --- ext/filter/filter.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/ext/filter/filter.c b/ext/filter/filter.c index 9864658b0b..7ce2033806 100644 --- a/ext/filter/filter.c +++ b/ext/filter/filter.c @@ -325,7 +325,7 @@ static unsigned int php_sapi_filter(int arg, char *var, char **val, unsigned int /* Make a copy of the variable name, as php_register_variable_ex seems to * modify it */ - orig_var = estrdup(var); + orig_var = var; /* Store the RAW variable internally */ /* FIXME: Should not use php_register_variable_ex as that also registers @@ -566,6 +566,35 @@ PHP_FUNCTION(input_filters_list) */ PHP_FUNCTION(filter_data) { + long filter = FS_DEFAULT; + char *charset = NULL; + int charset_len; + zval *var, *flags = NULL; + int filter_flags = 0; + zval *options = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/l|zs", &var, &filter, &flags, &charset, &charset_len) == FAILURE) { + return; + } + + if (flags) { + switch (Z_TYPE_P(flags)) { + case IS_ARRAY: + options = flags; + break; + + case IS_STRING: + case IS_BOOL: + case IS_LONG: + convert_to_long(flags); + filter_flags = Z_LVAL_P(flags); + options = NULL; + break; + } + } + + php_zval_filter_recursive(var, filter, filter_flags, options, charset); + RETURN_ZVAL(var, 1, 0); } /* }}} */ -- 2.40.0