]> granicus.if.org Git - php/commitdiff
MF5 fix for #47930
authorStanislav Malyshev <stas@php.net>
Tue, 28 Apr 2009 22:59:07 +0000 (22:59 +0000)
committerStanislav Malyshev <stas@php.net>
Tue, 28 Apr 2009 22:59:07 +0000 (22:59 +0000)
ext/filter/filter.c
main/SAPI.c
main/SAPI.h
main/php_content_types.c

index e8b98fb3d1edd7586ddd1665f40d3241fd6fa9d2..853d033e3d8607b1c51c36695ea040977f8831f6 100644 (file)
@@ -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;
index 56b46fff25ddb4944e9039e00343c20e0bbe70d4..55a3defd41b61924efe912cef03389d03ef6d6d3 100644 (file)
@@ -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;
 }
 
index 71b126b0f3d4bd8604fb1cb3f1ae19d0aa105c33..064c275b9b7a11f63469eb889c69890b7e3e6914 100644 (file)
@@ -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);
 };
 
 
index 38e40a9aa5063b22b43f81d458c60f539977b9f3..1b279a0f636f7f6f69afdfb5b78485ea4479f1ba 100644 (file)
@@ -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;
 }
 /* }}} */