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

index d77d69543629c73101a38c40a94261b7754b60e3..f42764f6e6a19d525d5cfbc864940956a45aae64 100644 (file)
@@ -751,6 +751,21 @@ static void init_request_info(TSRMLS_D)
                char *env_path_info = sapi_cgibin_getenv("PATH_INFO", sizeof("PATH_INFO")-1 TSRMLS_CC);
                char *env_script_name = sapi_cgibin_getenv("SCRIPT_NAME", sizeof("SCRIPT_NAME")-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)) {                       
                        struct stat st;
                        char *real_path = NULL;