]> granicus.if.org Git - php/commitdiff
Fixed bug #42523 (PHP_SELF duplicates path)
authorDmitry Stogov <dmitry@php.net>
Wed, 5 Sep 2007 08:26:32 +0000 (08:26 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 5 Sep 2007 08:26:32 +0000 (08:26 +0000)
NEWS
sapi/cgi/cgi_main.c

diff --git a/NEWS b/NEWS
index a0a9446690c79d1ac6cc78df03d8ba309ae3488f..77dd9b23d3ec53af1a609ec017da5c1d7ece6675 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ PHP                                                                        NEWS
 - Upgraded PCRE to version 7.3 (Nuno)
 - Added optional parameter $provide_object to debug_backtrace(). (Sebastian)
 
+- Fixed bug #42523 (PHP_SELF duplicates path). (Dmitry)
 - Fixed bug #42512 (ip2long('255.255.255.255') should return 4294967295 on
   64-bit PHP). (Derick)
 - Fixed bug #42506 (php_pgsql_convert() timezone parse bug) (nonunnet at
index a6ce49271afe44f90306d976a71ac63c68de11ed..9034479997b7d36bbf36b30d54361844fc69f927 100644 (file)
@@ -778,6 +778,21 @@ static void init_request_info(TSRMLS_D)
                char *env_redirect_url = sapi_cgibin_getenv("REDIRECT_URL", sizeof("REDIRECT_URL")-1 TSRMLS_CC);
                char *env_document_root = sapi_cgibin_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT")-1 TSRMLS_CC);
 
+               /* Hack for buggy IIS that sets incorrect PATH_INFO */
+               char *env_server_software = sapi_cgibin_getenv("SERVER_SOFTWARE", sizeof("SERVER_SOFTWARE")-1 TSRMLS_CC);
+               if (env_server_software &&
+                   env_script_name &&
+                   env_path_info &&
+                   strncmp(env_server_software, "Microsoft-IIS", sizeof("Microsoft-IIS")-1) == 0 &&
+                   strncmp(env_path_info, env_script_name, strlen(env_script_name)) == 0) {
+                       env_path_info = _sapi_cgibin_putenv("ORIG_PATH_INFO", env_path_info TSRMLS_CC);
+                   env_path_info += strlen(env_script_name);
+                   if (*env_path_info == 0) {
+                       env_path_info = NULL;
+                   }
+                       env_path_info = _sapi_cgibin_putenv("PATH_INFO", env_path_info TSRMLS_CC);
+               }
+
                if (CGIG(fix_pathinfo)) {
                        char *real_path = NULL;
                        char *orig_path_translated = env_path_translated;