iliaa           Thu Jul 31 18:29:32 2003 EDT

  Modified files:              
    /php-src/main       php_variables.c 
  Log:
  Fixed bug #24883 (variables created through register_globals, ignore 
  gpc_order and variables_order).
  Prevent multiple registration of ENV & SERVER variables when more then one
  is specified.
  Prevent multiple addition of GET/POST/COOKIE variables when building 
  _REQUEST.
  
  
Index: php-src/main/php_variables.c
diff -u php-src/main/php_variables.c:1.66 php-src/main/php_variables.c:1.67
--- php-src/main/php_variables.c:1.66   Tue Jul 22 12:08:50 2003
+++ php-src/main/php_variables.c        Thu Jul 31 18:29:32 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: php_variables.c,v 1.66 2003/07/22 16:08:50 zeev Exp $ */
+/* $Id: php_variables.c,v 1.67 2003/07/31 22:29:32 iliaa Exp $ */
 
 #include <stdio.h>
 #include "php.h"
@@ -537,7 +537,7 @@
 int php_hash_environment(TSRMLS_D)
 {
        char *p;
-       unsigned char _gpc_flags[3] = {0, 0, 0};
+       unsigned char _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;
@@ -575,6 +575,9 @@
                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);
+               if (PG(register_globals)) {
+                       php_autoglobal_merge(&EG(symbol_table), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_ENV]) TSRMLS_CC);
+               }
        }
 
        for (p=variables_order; p && *p; p++) {
@@ -584,6 +587,9 @@
                                if (!_gpc_flags[0] && !SG(headers_sent) && 
SG(request_info).request_method && !strcasecmp(SG(request_info).request_method, 
"POST")) {
                                        sapi_module.treat_data(PARSE_POST, NULL, NULL 
TSRMLS_CC);       /* POST Data */
                                        _gpc_flags[0]=1;
+                                       if (PG(register_globals)) {
+                                               
php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]) 
TSRMLS_CC);
+                                       }
                                }
                                break;
                        case 'c':
@@ -591,6 +597,9 @@
                                if (!_gpc_flags[1]) {
                                        sapi_module.treat_data(PARSE_COOKIE, NULL, 
NULL TSRMLS_CC);     /* Cookie Data */
                                        _gpc_flags[1]=1;
+                                       if (PG(register_globals)) {
+                                               
php_autoglobal_merge(&EG(symbol_table), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]) TSRMLS_CC);
+                                       }
                                }
                                break;
                        case 'g':
@@ -598,36 +607,42 @@
                                if (!_gpc_flags[2]) {
                                        sapi_module.treat_data(PARSE_GET, NULL, NULL 
TSRMLS_CC);        /* GET Data */
                                        _gpc_flags[2]=1;
+                                       if (PG(register_globals)) {
+                                               
php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]) 
TSRMLS_CC);
+                                       }
                                }
                                break;
                        case 'e':
                        case 'E':
-                               if (!jit_initialization) {
+                               if (!jit_initialization && !_gpc_flags[3]) {
                                        if (have_variables_order) {
                                                php_auto_globals_create_env("_ENV", 
sizeof("_ENV")-1 TSRMLS_CC);
+                                               if (PG(register_globals)) {
+                                                       
php_autoglobal_merge(&EG(symbol_table), Z_ARRVAL_P(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]=1;
                                }
                                break;
                        case 's':
                        case 'S':
-                               if (!jit_initialization) {
+                               if (!jit_initialization && !_gpc_flags[4]) {
                                        php_register_server_variables(TSRMLS_C);
+                                       _gpc_flags[4]=1;
+                                       if (PG(register_globals)) {
+                                               
php_autoglobal_merge(&EG(symbol_table), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]) TSRMLS_CC);
+                                       }
                                }
                                break;
                }
        }
 
-       if (!jit_initialization && !have_variables_order) {
+       if (!jit_initialization && !_gpc_flags[4]) {
                php_register_server_variables(TSRMLS_C);
-       }
-
-       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);
-                       }
+               if (PG(register_globals)) {
+                       php_autoglobal_merge(&EG(symbol_table), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]) TSRMLS_CC);
                }
        }
 
@@ -704,6 +719,7 @@
 {
        zval *form_variables;
        char *variables_order;
+       unsigned char _gpc_flags[3] = {0, 0, 0};
        char *p;
 
        if (PG(variables_order)) {
@@ -720,15 +736,24 @@
                switch (*p) {
                        case 'g':
                        case 'G':
-                               php_autoglobal_merge(Z_ARRVAL_P(form_variables), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]) TSRMLS_CC);
+                               if (!_gpc_flags[0]) {
+                                       
php_autoglobal_merge(Z_ARRVAL_P(form_variables), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_GET]) TSRMLS_CC);
+                                       _gpc_flags[0] = 1;
+                               }
                                break;
                        case 'p':
                        case 'P':
-                               php_autoglobal_merge(Z_ARRVAL_P(form_variables), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]) TSRMLS_CC);
+                               if (!_gpc_flags[1]) {
+                                       
php_autoglobal_merge(Z_ARRVAL_P(form_variables), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_POST]) TSRMLS_CC);
+                                       _gpc_flags[1] = 1;
+                               }
                                break;
                        case 'c':
                        case 'C':
-                               php_autoglobal_merge(Z_ARRVAL_P(form_variables), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]) TSRMLS_CC);
+                               if (!_gpc_flags[2]) {
+                                       
php_autoglobal_merge(Z_ARRVAL_P(form_variables), 
Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_COOKIE]) TSRMLS_CC);
+                                       _gpc_flags[2] = 1;
+                               }
                                break;
                }
        }



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to