dmitry          Mon Sep 24 11:43:02 2007 UTC

  Modified files:              
    /php-src/sapi/cgi   cgi_main.c 
  Log:
  Fixed bug #42699 (PHP_SELF duplicates path)
  
  
http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/cgi_main.c?r1=1.334&r2=1.335&diff_format=u
Index: php-src/sapi/cgi/cgi_main.c
diff -u php-src/sapi/cgi/cgi_main.c:1.334 php-src/sapi/cgi/cgi_main.c:1.335
--- php-src/sapi/cgi/cgi_main.c:1.334   Mon Sep 10 10:55:41 2007
+++ php-src/sapi/cgi/cgi_main.c Mon Sep 24 11:43:02 2007
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: cgi_main.c,v 1.334 2007/09/10 10:55:41 dmitry Exp $ */
+/* $Id: cgi_main.c,v 1.335 2007/09/24 11:43:02 dmitry Exp $ */
 
 #include "php.h"
 #include "php_globals.h"
@@ -498,29 +498,42 @@
 
 static void sapi_cgi_register_variables(zval *track_vars_array TSRMLS_DC)
 {
-       char *script_name   = SG(request_info).request_uri;
-       unsigned int script_name_len = script_name ? strlen(script_name) : 0;
-       char *path_info     = sapi_cgibin_getenv("PATH_INFO", 
sizeof("PATH_INFO")-1 TSRMLS_CC);
-       unsigned int path_info_len = path_info ? strlen(path_info) : 0;
-       unsigned int php_self_len = script_name_len + path_info_len;
-       char *php_self = emalloc(php_self_len + 1);
-
-       if (script_name) {
-               memcpy(php_self, script_name, script_name_len + 1);
-       }
-       if (path_info) {
-               memcpy(php_self + script_name_len, path_info, path_info_len + 
1);
-       }
+       unsigned int php_self_len;
+       char *php_self;
 
        /* In CGI mode, we consider the environment to be a part of the server
         * variables
         */
        php_import_environment_variables(track_vars_array TSRMLS_CC);
-       /* Build the special-case PHP_SELF variable for the CGI version */
-       if (sapi_module.input_filter(PARSE_SERVER, "PHP_SELF", &php_self, 
php_self_len, &php_self_len TSRMLS_CC)) {
-               php_register_variable_safe("PHP_SELF", php_self, php_self_len, 
track_vars_array TSRMLS_CC);
+
+       if (CGIG(fix_pathinfo)) {
+               char *script_name   = SG(request_info).request_uri;
+               unsigned int script_name_len = script_name ? 
strlen(script_name) : 0;
+               char *path_info     = sapi_cgibin_getenv("PATH_INFO", 
sizeof("PATH_INFO")-1 TSRMLS_CC);
+               unsigned int path_info_len = path_info ? strlen(path_info) : 0;
+               
+               php_self_len = script_name_len + path_info_len;
+               php_self = emalloc(php_self_len + 1);
+
+               if (script_name) {
+                       memcpy(php_self, script_name, script_name_len + 1);
+               }
+               if (path_info) {
+                       memcpy(php_self + script_name_len, path_info, 
path_info_len + 1);
+               }
+
+               /* Build the special-case PHP_SELF variable for the CGI version 
*/
+               if (sapi_module.input_filter(PARSE_SERVER, "PHP_SELF", 
&php_self, php_self_len, &php_self_len TSRMLS_CC)) {
+                       php_register_variable_safe("PHP_SELF", php_self, 
php_self_len, track_vars_array TSRMLS_CC);
+               }
+               efree(php_self);
+       } else {
+               php_self = SG(request_info).request_uri ? 
SG(request_info).request_uri : "";
+               php_self_len = strlen(php_self);
+               if (sapi_module.input_filter(PARSE_SERVER, "PHP_SELF", 
&php_self, php_self_len, &php_self_len TSRMLS_CC)) {
+                       php_register_variable_safe("PHP_SELF", php_self, 
php_self_len, track_vars_array TSRMLS_CC);
+               }
        }
-       efree(php_self);
 }
 
 static void sapi_cgi_log_message(char *message)

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

Reply via email to