From de79c1eb6c1ab40fe4fb9190c1448ad861963fac Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Tue, 28 Apr 2009 22:59:07 +0000 Subject: [PATCH] MF5 fix for #47930 --- ext/filter/filter.c | 14 +++++++++++++- main/SAPI.c | 9 ++++++++- main/SAPI.h | 3 ++- main/php_content_types.c | 2 +- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/ext/filter/filter.c b/ext/filter/filter.c index e8b98fb3d1..853d033e3d 100644 --- a/ext/filter/filter.c +++ b/ext/filter/filter.c @@ -76,6 +76,7 @@ static const filter_list_entry filter_list[] = { #endif static unsigned int php_sapi_filter(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC); +static unsigned int php_sapi_filter_init(TSRMLS_D); /* {{{ arginfo */ ZEND_BEGIN_ARG_INFO_EX(arginfo_filter_input, 0, 0, 2) @@ -270,7 +271,7 @@ PHP_MINIT_FUNCTION(filter) REGISTER_LONG_CONSTANT("FILTER_FLAG_NO_RES_RANGE", FILTER_FLAG_NO_RES_RANGE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("FILTER_FLAG_NO_PRIV_RANGE", FILTER_FLAG_NO_PRIV_RANGE, CONST_CS | CONST_PERSISTENT); - sapi_register_input_filter(php_sapi_filter); + sapi_register_input_filter(php_sapi_filter, php_sapi_filter_init); return SUCCESS; } @@ -339,6 +340,17 @@ static filter_list_entry php_find_filter(long id) /* {{{ */ } /* }}} */ +static unsigned int php_sapi_filter_init(TSRMLS_D) +{ + IF_G(get_array) = NULL; + IF_G(post_array) = NULL; + IF_G(cookie_array) = NULL; + IF_G(server_array) = NULL; + IF_G(env_array) = NULL; + IF_G(session_array) = NULL; + return SUCCESS; +} + static void php_zval_filter(zval **value, long filter, long flags, zval *options, char* charset, zend_bool copy TSRMLS_DC) /* {{{ */ { filter_list_entry filter_func; diff --git a/main/SAPI.c b/main/SAPI.c index 56b46fff25..55a3defd41 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -345,6 +345,9 @@ SAPI_API void sapi_activate_headers_only(TSRMLS_D) sapi_module.activate(TSRMLS_C); } } + if (sapi_module.input_filter_init ) { + sapi_module.input_filter_init(TSRMLS_C); + } } /* @@ -411,6 +414,9 @@ SAPI_API void sapi_activate(TSRMLS_D) sapi_module.activate(TSRMLS_C); } } + if (sapi_module.input_filter_init ) { + sapi_module.input_filter_init(TSRMLS_C); + } } @@ -852,13 +858,14 @@ SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zva return SUCCESS; } -SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC)) +SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC), unsigned int (*input_filter_init)(TSRMLS_D)) { TSRMLS_FETCH(); if (SG(sapi_started) && EG(in_execution)) { return FAILURE; } sapi_module.input_filter = input_filter; + sapi_module.input_filter_init = input_filter_init; return SUCCESS; } diff --git a/main/SAPI.h b/main/SAPI.h index 71b126b0f3..064c275b9b 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -192,7 +192,7 @@ SAPI_API int sapi_register_post_entry(sapi_post_entry *post_entry TSRMLS_DC); SAPI_API void sapi_unregister_post_entry(sapi_post_entry *post_entry TSRMLS_DC); SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D)); SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC)); -SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC)); +SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC), unsigned int (*input_filter_init)(TSRMLS_D)); SAPI_API int sapi_flush(TSRMLS_D); SAPI_API struct stat *sapi_get_stat(TSRMLS_D); @@ -267,6 +267,7 @@ struct _sapi_module_struct { char *ini_entries; const zend_function_entry *additional_functions; + unsigned int (*input_filter_init)(TSRMLS_D); }; diff --git a/main/php_content_types.c b/main/php_content_types.c index 38e40a9aa5..1b279a0f63 100644 --- a/main/php_content_types.c +++ b/main/php_content_types.c @@ -75,7 +75,7 @@ int php_startup_sapi_content_types(TSRMLS_D) { sapi_register_default_post_reader(php_default_post_reader); sapi_register_treat_data(php_default_treat_data); - sapi_register_input_filter(php_default_input_filter); + sapi_register_input_filter(php_default_input_filter, NULL); return SUCCESS; } /* }}} */ -- 2.40.0