summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2007-09-05 08:26:32 +0000
committerDmitry Stogov <dmitry@php.net>2007-09-05 08:26:32 +0000
commit5d238efaa65ed24bfbec64fcb921e23ffbf55f52 (patch)
tree7ef377e79d3b4aa288325527602d9f68341c92ac
parent18ce620bdf714990b11f385943cfb47e407ab343 (diff)
downloadphp-git-5d238efaa65ed24bfbec64fcb921e23ffbf55f52.tar.gz
Fixed bug #42523 (PHP_SELF duplicates path)
-rw-r--r--NEWS1
-rw-r--r--sapi/cgi/cgi_main.c15
2 files changed, 16 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index a0a9446690..77dd9b23d3 100644
--- 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
diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index a6ce49271a..9034479997 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -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;