From 29770573e61a344c7ba16aa751ba4c05b97a8256 Mon Sep 17 00:00:00 2001 From: Norikatsu Shigemura Date: Tue, 24 Jun 2003 08:16:25 +0000 Subject: o Add FriBiDi extension [1] o New patch-main::main.c file [2]: - Fixed bug #24253 (missing variables when register_globals is on) - Fixed a memory leak when more then 1 E|S flag is passed to gpc_order. - Fixed a memory leak when variables_order is not set and gpc_order has S|s flag. - Optimized out duplicate parsing of the variables order string. PR: ports/53609 Submitted by: Alex Dupre (maintainer) Patched by: Thierry Thomas [1] Requested by: Ian Service [2] --- lang/php5/files/patch-main::main.c | 139 +++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 lang/php5/files/patch-main::main.c (limited to 'lang/php5/files/patch-main::main.c') diff --git a/lang/php5/files/patch-main::main.c b/lang/php5/files/patch-main::main.c new file mode 100644 index 000000000000..4ed09ae69f5d --- /dev/null +++ b/lang/php5/files/patch-main::main.c @@ -0,0 +1,139 @@ +--- main/main.c.orig Sun Jun 22 11:16:39 2003 ++++ main/main.c Sun Jun 22 11:17:00 2003 + +@@ -134,7 +134,6 @@ static int short_track_vars_names_length + + #define NUM_TRACK_VARS (sizeof(short_track_vars_names_length)/sizeof(int)) + +- + #define SAFE_FILENAME(f) ((f)?(f):"-") + + /* {{{ PHP_INI_MH +@@ -1362,7 +1361,7 @@ static void php_autoglobal_merge(HashTab + static int php_hash_environment(TSRMLS_D) + { + char *p; +- unsigned char _gpc_flags[3] = {0, 0, 0}; ++ int _gpc_flags[5] = {0, 0, 0, 0, 0}; + zend_bool have_variables_order; + zval *dummy_track_vars_array = NULL; + zend_bool initialized_dummy_track_vars_array=0; +@@ -1409,42 +1408,48 @@ static int php_hash_environment(TSRMLS_D + case 'P': + if (!_gpc_flags[0] && !SG(headers_sent) && SG(request_info).request_method && !strcmp(SG(request_info).request_method, "POST")) { + sapi_module.treat_data(PARSE_POST, NULL, NULL TSRMLS_CC); /* POST Data */ +- _gpc_flags[0]=1; ++ _gpc_flags[0]=TRACK_VARS_POST + 1; + } + break; + case 'c': + case 'C': + if (!_gpc_flags[1]) { + sapi_module.treat_data(PARSE_COOKIE, NULL, NULL TSRMLS_CC); /* Cookie Data */ +- _gpc_flags[1]=1; ++ _gpc_flags[1]=TRACK_VARS_COOKIE + 1; + } + break; + case 'g': + case 'G': + if (!_gpc_flags[2]) { + sapi_module.treat_data(PARSE_GET, NULL, NULL TSRMLS_CC); /* GET Data */ +- _gpc_flags[2]=1; ++ _gpc_flags[2]=TRACK_VARS_GET + 1; + } + break; + case 'e': + case 'E': +- if (have_variables_order) { +- ALLOC_ZVAL(PG(http_globals)[TRACK_VARS_ENV]); +- array_init(PG(http_globals)[TRACK_VARS_ENV]); +- INIT_PZVAL(PG(http_globals)[TRACK_VARS_ENV]); +- php_import_environment_variables(PG(http_globals)[TRACK_VARS_ENV] TSRMLS_CC); +- } else { +- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported 'e' element (environment) used in gpc_order - use variables_order instead"); ++ if (!_gpc_flags[3]) { ++ if (have_variables_order) { ++ ALLOC_ZVAL(PG(http_globals)[TRACK_VARS_ENV]); ++ array_init(PG(http_globals)[TRACK_VARS_ENV]); ++ INIT_PZVAL(PG(http_globals)[TRACK_VARS_ENV]); ++ php_import_environment_variables(PG(http_globals)[TRACK_VARS_ENV] TSRMLS_CC); ++ } else { ++ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unsupported 'e' element (environment) used in gpc_order - use variables_order instead"); ++ } ++ _gpc_flags[3]=TRACK_VARS_ENV + 1; + } + break; + case 's': + case 'S': +- php_register_server_variables(TSRMLS_C); ++ if (!_gpc_flags[4]) { ++ php_register_server_variables(TSRMLS_C); ++ _gpc_flags[4]=TRACK_VARS_SERVER + 1; ++ } + break; + } + } + +- if (!have_variables_order) { ++ if (!have_variables_order && !PG(http_globals)[TRACK_VARS_SERVER]) { + php_register_server_variables(TSRMLS_C); + } + +@@ -1453,6 +1458,14 @@ static int php_hash_environment(TSRMLS_D + php_build_argv(SG(request_info).query_string TSRMLS_CC); + } + ++ if (PG(register_globals)) { ++ for (i = 0; i < 5; i++) { ++ if (PG(http_globals)[i]) { ++ php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(PG(http_globals)[i]) TSRMLS_CC); ++ } ++ } ++ } ++ + for (i=0; irefcount+1, 0); +- } +- zend_hash_move_forward_ex(Z_ARRVAL_P(form_variables), &pos); ++ for (i = 0; i < 3; i++) { ++ if (_gpc_flags[i]) { ++ php_autoglobal_merge(Z_ARRVAL_P(form_variables), Z_ARRVAL_P(PG(http_globals)[(_gpc_flags[i] - 1)]) TSRMLS_CC); + } + } ++ + zend_hash_update(&EG(symbol_table), "_REQUEST", sizeof("_REQUEST"), &form_variables, sizeof(zval *), NULL); + } -- cgit v1.2.3