laruence                                 Tue, 01 Nov 2011 12:24:02 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=318639

Log:
Fixed Bug #60180 ($_SERVER["PHP_SELF"] incorrect)

Bug: https://bugs.php.net/60180 (Assigned) $_SERVER["PHP_SELF"] incorrect
      
Changed paths:
    U   php/php-src/branches/PHP_5_4/NEWS
    U   php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c
    A   php/php-src/branches/PHP_5_4/sapi/cli/tests/php_cli_server_010.phpt
    U   php/php-src/trunk/sapi/cli/php_cli_server.c
    A   php/php-src/trunk/sapi/cli/tests/php_cli_server_010.phpt

Modified: php/php-src/branches/PHP_5_4/NEWS
===================================================================
--- php/php-src/branches/PHP_5_4/NEWS   2011-11-01 11:51:53 UTC (rev 318638)
+++ php/php-src/branches/PHP_5_4/NEWS   2011-11-01 12:24:02 UTC (rev 318639)
@@ -9,6 +9,7 @@
     (Laruence)
   . Fixed bug #60115 (memory definitely lost in cli server). (Laruence)
   . Fixed bug #60146 (Last 2 lines of page not being output). (Laruence)
+  . Fixed bug #60180 ($_SERVER["PHP_SELF"] incorrect). (Laruence)

 - Core:
   . Fixed bug #60120 (proc_open's streams may hang with stdin/out/err when

Modified: php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c
===================================================================
--- php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c      2011-11-01 
11:51:53 UTC (rev 318638)
+++ php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c      2011-11-01 
12:24:02 UTC (rev 318639)
@@ -579,13 +579,21 @@
        }
        sapi_cli_server_register_variable(track_vars_array, "REQUEST_URI", 
client->request.request_uri TSRMLS_CC);
        sapi_cli_server_register_variable(track_vars_array, "REQUEST_METHOD", 
SG(request_info).request_method TSRMLS_CC);
-       sapi_cli_server_register_variable(track_vars_array, "PHP_SELF", 
client->request.vpath TSRMLS_CC);
+       sapi_cli_server_register_variable(track_vars_array, "SCRIPT_NAME", 
client->request.vpath TSRMLS_CC);
        if (SG(request_info).path_translated) {
                sapi_cli_server_register_variable(track_vars_array, 
"SCRIPT_FILENAME", SG(request_info).path_translated TSRMLS_CC);
        }
        if (client->request.path_info) {
                sapi_cli_server_register_variable(track_vars_array, 
"PATH_INFO", client->request.path_info TSRMLS_CC);
        }
+       if (client->request.path_info_len) {
+               char *tmp;
+               spprintf(&tmp, 0, "%s%s", client->request.vpath, 
client->request.path_info);
+               sapi_cli_server_register_variable(track_vars_array, "PHP_SELF", 
tmp TSRMLS_CC);
+               efree(tmp);
+       } else {
+               sapi_cli_server_register_variable(track_vars_array, "PHP_SELF", 
client->request.vpath TSRMLS_CC);
+       }
        if (client->request.query_string) {
                sapi_cli_server_register_variable(track_vars_array, 
"QUERY_STRING", client->request.query_string TSRMLS_CC);
        }
@@ -1330,6 +1338,16 @@
                request->path_translated = buf;
                request->path_translated_len = q - buf;
        }
+#ifdef PHP_WIN32
+       {
+               uint i = 0;
+               for (;i<request->vpath_len;i++) {
+                       if (request->vpath[i] == '\\') {
+                               request->vpath[i] = '/';
+                       }
+               }
+       }
+#endif
        request->sb = sb;
 } /* }}} */


Added: php/php-src/branches/PHP_5_4/sapi/cli/tests/php_cli_server_010.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/sapi/cli/tests/php_cli_server_010.phpt         
                (rev 0)
+++ php/php-src/branches/PHP_5_4/sapi/cli/tests/php_cli_server_010.phpt 
2011-11-01 12:24:02 UTC (rev 318639)
@@ -0,0 +1,75 @@
+--TEST--
+Bug #60180 ($_SERVER["PHP_SELF"] incorrect)
+--SKIPIF--
+<?php
+include "skipif.inc";
+?>
+--FILE--
+<?php
+include "php_cli_server.inc";
+php_cli_server_start('var_dump($_SERVER["PHP_SELF"], $_SERVER["SCRIPT_NAME"], 
$_SERVER["PATH_INFO"], $_SERVER["QUERY_STRING"]);', TRUE);
+
+list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
+$port = intval($port)?:80;
+
+$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
+if (!$fp) {
+  die("connect failed");
+}
+
+if(fwrite($fp, <<<HEADER
+GET /foo/bar?foo=bar HTTP/1.1
+Host: {$host}
+
+
+HEADER
+)) {
+       while (!feof($fp)) {
+               echo fgets($fp);
+       }
+}
+
+fclose($fp);
+
+$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
+if (!$fp) {
+  die("connect failed");
+}
+
+
+if(fwrite($fp, <<<HEADER
+GET /index.php/foo/bar/?foo=bar HTTP/1.0
+Host: {$host}
+
+
+HEADER
+)) {
+       while (!feof($fp)) {
+               echo fgets($fp);
+       }
+}
+
+fclose($fp);
+
+?>
+--EXPECTF--
+HTTP/1.1 200 OK
+Host: %s
+Connection: closed
+X-Powered-By: PHP/%s
+Content-type: text/html
+
+string(18) "/index.php/foo/bar"
+string(10) "/index.php"
+string(8) "/foo/bar"
+string(7) "foo=bar"
+HTTP/1.0 200 OK
+Host: %s
+Connection: closed
+X-Powered-By: PHP/%s
+Content-type: text/html
+
+string(19) "/index.php/foo/bar/"
+string(10) "/index.php"
+string(9) "/foo/bar/"
+string(7) "foo=bar"

Modified: php/php-src/trunk/sapi/cli/php_cli_server.c
===================================================================
--- php/php-src/trunk/sapi/cli/php_cli_server.c 2011-11-01 11:51:53 UTC (rev 
318638)
+++ php/php-src/trunk/sapi/cli/php_cli_server.c 2011-11-01 12:24:02 UTC (rev 
318639)
@@ -579,13 +579,21 @@
        }
        sapi_cli_server_register_variable(track_vars_array, "REQUEST_URI", 
client->request.request_uri TSRMLS_CC);
        sapi_cli_server_register_variable(track_vars_array, "REQUEST_METHOD", 
SG(request_info).request_method TSRMLS_CC);
-       sapi_cli_server_register_variable(track_vars_array, "PHP_SELF", 
client->request.vpath TSRMLS_CC);
+       sapi_cli_server_register_variable(track_vars_array, "SCRIPT_NAME", 
client->request.vpath TSRMLS_CC);
        if (SG(request_info).path_translated) {
                sapi_cli_server_register_variable(track_vars_array, 
"SCRIPT_FILENAME", SG(request_info).path_translated TSRMLS_CC);
        }
        if (client->request.path_info) {
                sapi_cli_server_register_variable(track_vars_array, 
"PATH_INFO", client->request.path_info TSRMLS_CC);
        }
+       if (client->request.path_info_len) {
+               char *tmp;
+               spprintf(&tmp, 0, "%s%s", client->request.vpath, 
client->request.path_info);
+               sapi_cli_server_register_variable(track_vars_array, "PHP_SELF", 
tmp TSRMLS_CC);
+               efree(tmp);
+       } else {
+               sapi_cli_server_register_variable(track_vars_array, "PHP_SELF", 
client->request.vpath TSRMLS_CC);
+       }
        if (client->request.query_string) {
                sapi_cli_server_register_variable(track_vars_array, 
"QUERY_STRING", client->request.query_string TSRMLS_CC);
        }
@@ -1330,6 +1338,16 @@
                request->path_translated = buf;
                request->path_translated_len = q - buf;
        }
+#ifdef PHP_WIN32
+       {
+               uint i = 0;
+               for (;i<request->vpath_len;i++) {
+                       if (request->vpath[i] == '\\') {
+                               request->vpath[i] = '/';
+                       }
+               }
+       }
+#endif
        request->sb = sb;
 } /* }}} */


Added: php/php-src/trunk/sapi/cli/tests/php_cli_server_010.phpt
===================================================================
--- php/php-src/trunk/sapi/cli/tests/php_cli_server_010.phpt                    
        (rev 0)
+++ php/php-src/trunk/sapi/cli/tests/php_cli_server_010.phpt    2011-11-01 
12:24:02 UTC (rev 318639)
@@ -0,0 +1,75 @@
+--TEST--
+Bug #60180 ($_SERVER["PHP_SELF"] incorrect)
+--SKIPIF--
+<?php
+include "skipif.inc";
+?>
+--FILE--
+<?php
+include "php_cli_server.inc";
+php_cli_server_start('var_dump($_SERVER["PHP_SELF"], $_SERVER["SCRIPT_NAME"], 
$_SERVER["PATH_INFO"], $_SERVER["QUERY_STRING"]);', TRUE);
+
+list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
+$port = intval($port)?:80;
+
+$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
+if (!$fp) {
+  die("connect failed");
+}
+
+if(fwrite($fp, <<<HEADER
+GET /foo/bar?foo=bar HTTP/1.1
+Host: {$host}
+
+
+HEADER
+)) {
+       while (!feof($fp)) {
+               echo fgets($fp);
+       }
+}
+
+fclose($fp);
+
+$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
+if (!$fp) {
+  die("connect failed");
+}
+
+
+if(fwrite($fp, <<<HEADER
+GET /index.php/foo/bar/?foo=bar HTTP/1.0
+Host: {$host}
+
+
+HEADER
+)) {
+       while (!feof($fp)) {
+               echo fgets($fp);
+       }
+}
+
+fclose($fp);
+
+?>
+--EXPECTF--
+HTTP/1.1 200 OK
+Host: %s
+Connection: closed
+X-Powered-By: PHP/%s
+Content-type: text/html
+
+string(18) "/index.php/foo/bar"
+string(10) "/index.php"
+string(8) "/foo/bar"
+string(7) "foo=bar"
+HTTP/1.0 200 OK
+Host: %s
+Connection: closed
+X-Powered-By: PHP/%s
+Content-type: text/html
+
+string(19) "/index.php/foo/bar/"
+string(10) "/index.php"
+string(9) "/foo/bar/"
+string(7) "foo=bar"

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

Reply via email to