laruence Tue, 20 Sep 2011 07:06:55 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=317040
Log: Fix Bug #55726 (Changing the working directory makes router script inaccessible) Bug: https://bugs.php.net/55726 (Assigned) Changing the working directory makes router script inaccessible Changed paths: U php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c U php/php-src/trunk/sapi/cli/php_cli_server.c 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-09-20 05:42:36 UTC (rev 317039) +++ php/php-src/branches/PHP_5_4/sapi/cli/php_cli_server.c 2011-09-20 07:06:55 UTC (rev 317040) @@ -1877,11 +1877,24 @@ } { zend_file_handle zfd; +#if HAVE_BROKEN_GETCWD + int old_cwd_fd = -1; + old_cwd_fd = open(".", 0); +#else + char *old_cwd; + ALLOCA_FLAG(use_heap) +#define OLD_CWD_SIZE 4096 + old_cwd = do_alloca(OLD_CWD_SIZE, use_heap); + old_cwd[0] = '\0'; + php_ignore_value(VCWD_GETCWD(old_cwd, OLD_CWD_SIZE-1)); +#endif + zfd.type = ZEND_HANDLE_FILENAME; zfd.filename = server->router; zfd.handle.fp = NULL; zfd.free_filename = 0; zfd.opened_path = NULL; + zend_try { zval *retval = NULL; if (SUCCESS == zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, &retval, 1, &zfd)) { @@ -1893,6 +1906,18 @@ decline = 1; } } zend_end_try(); + +#if HAVE_BROKEN_GETCWD + if (old_cwd_fd != -1) { + fchdir(old_cwd_fd); + close(old_cwd_fd); + } +#else + if (old_cwd[0] != '\0') { + php_ignore_value(VCWD_CHDIR(old_cwd)); + } + free_alloca(old_cwd, use_heap); +#endif } if (decline) { Modified: php/php-src/trunk/sapi/cli/php_cli_server.c =================================================================== --- php/php-src/trunk/sapi/cli/php_cli_server.c 2011-09-20 05:42:36 UTC (rev 317039) +++ php/php-src/trunk/sapi/cli/php_cli_server.c 2011-09-20 07:06:55 UTC (rev 317040) @@ -1877,11 +1877,24 @@ } { zend_file_handle zfd; +#if HAVE_BROKEN_GETCWD + int old_cwd_fd = -1; + old_cwd_fd = open(".", 0); +#else + char *old_cwd; + ALLOCA_FLAG(use_heap) +#define OLD_CWD_SIZE 4096 + old_cwd = do_alloca(OLD_CWD_SIZE, use_heap); + old_cwd[0] = '\0'; + php_ignore_value(VCWD_GETCWD(old_cwd, OLD_CWD_SIZE-1)); +#endif + zfd.type = ZEND_HANDLE_FILENAME; zfd.filename = server->router; zfd.handle.fp = NULL; zfd.free_filename = 0; zfd.opened_path = NULL; + zend_try { zval *retval = NULL; if (SUCCESS == zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, &retval, 1, &zfd)) { @@ -1893,6 +1906,18 @@ decline = 1; } } zend_end_try(); + +#if HAVE_BROKEN_GETCWD + if (old_cwd_fd != -1) { + fchdir(old_cwd_fd); + close(old_cwd_fd); + } +#else + if (old_cwd[0] != '\0') { + php_ignore_value(VCWD_CHDIR(old_cwd)); + } + free_alloca(old_cwd, use_heap); +#endif } if (decline) {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
