]> granicus.if.org Git - php/commitdiff
Revert "Fixed bug #75287 (Builtin webserver crash after chdir in a shutdown function)"
authorNikita Popov <nikita.ppv@gmail.com>
Fri, 12 Jan 2018 17:11:12 +0000 (18:11 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Fri, 12 Jan 2018 17:11:12 +0000 (18:11 +0100)
This reverts commit 816758eda2bcdd69ba505fb6bbb79124a7bf2254.

After this commit relative router scripts were resolved against
docroot rather than shell cwd.

sapi/cli/php_cli_server.c

index 82c1982650b00c87f59329430ee3708a88907c68..17c854caad8f639b8201ed608103630b5212bf3e 100644 (file)
@@ -2126,6 +2126,12 @@ static int php_cli_server_dispatch_router(php_cli_server *server, php_cli_server
 {
        int decline = 0;
        zend_file_handle zfd;
+       char *old_cwd;
+
+       ALLOCA_FLAG(use_heap)
+       old_cwd = do_alloca(MAXPATHLEN, use_heap);
+       old_cwd[0] = '\0';
+       php_ignore_value(VCWD_GETCWD(old_cwd, MAXPATHLEN - 1));
 
        zfd.type = ZEND_HANDLE_FILENAME;
        zfd.filename = server->router;
@@ -2147,6 +2153,12 @@ static int php_cli_server_dispatch_router(php_cli_server *server, php_cli_server
                }
        } zend_end_try();
 
+       if (old_cwd[0] != '\0') {
+               php_ignore_value(VCWD_CHDIR(old_cwd));
+       }
+
+       free_alloca(old_cwd, use_heap);
+
        return decline;
 }
 /* }}} */
@@ -2338,20 +2350,10 @@ static int php_cli_server_ctor(php_cli_server *server, const char *addr, const c
 
        if (router) {
                size_t router_len = strlen(router);
-               if (!IS_ABSOLUTE_PATH(router, router_len)) {
-                       _router = pemalloc(server->document_root_len + router_len + 2, 1);
-                       if (!_router) {
-                               retval = FAILURE;
-                               goto out;
-                       }
-                       snprintf(_router,
-                               server->document_root_len + router_len + 2, "%s%c%s", server->document_root, DEFAULT_SLASH, router);
-               } else {
-                       _router = pestrndup(router, router_len, 1);
-                       if (!_router) {
-                               retval = FAILURE;
-                               goto out;
-                       }
+               _router = pestrndup(router, router_len, 1);
+               if (!_router) {
+                       retval = FAILURE;
+                       goto out;
                }
                server->router = _router;
                server->router_len = router_len;