From 1aeff522b8e5ee77b9ae91bab59699db4dfc2c7e Mon Sep 17 00:00:00 2001 From: "Christoph M. Becker" Date: Mon, 27 Jul 2020 17:50:41 +0200 Subject: Revert "Fix #79806: realpath() erroneously resolves link to link" This reverts commit d5b59b4303642adac91df2c93969a72bc0f5fa7d. --- NEWS | 1 - Zend/zend_virtual_cwd.c | 14 ++------------ ext/standard/tests/file/realpath_basic4.phpt | 6 ++++++ 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/NEWS b/NEWS index ffb7d830cb..0a6e60d419 100644 --- a/NEWS +++ b/NEWS @@ -5,7 +5,6 @@ PHP NEWS - Core: . Fixed bug #79884 (PHP_CONFIG_FILE_PATH is meaningless). (cmb) . Fixed bug #77932 (File extensions are case-sensitive). (cmb) - . Fixed bug #79806 (realpath() erroneously resolves link to link). (cmb) ?? ??? ????, PHP 7.3.21 diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c index 3b90074683..253ed8c420 100644 --- a/Zend/zend_virtual_cwd.c +++ b/Zend/zend_virtual_cwd.c @@ -845,7 +845,6 @@ static size_t tsrm_realpath_r(char *path, size_t start, size_t len, int *ll, tim } #ifdef ZEND_WIN32 -retry_reparse_point: if (save) { pathw = php_win32_ioutil_any_to_w(path); if (!pathw) { @@ -868,7 +867,7 @@ retry_reparse_point: tmp = do_alloca(len+1, use_heap); memcpy(tmp, path, len+1); -retry_reparse_tag_cloud: +retry: if(save && !(IS_UNC_PATH(path, len) && len >= 3 && path[2] != '?') && (dataw.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) @@ -929,7 +928,7 @@ retry_reparse_tag_cloud: dataw.dwFileAttributes = fileInformation.dwFileAttributes; CloseHandle(hLink); (*ll)--; - goto retry_reparse_tag_cloud; + goto retry; } free_alloca(tmp, use_heap); CloseHandle(hLink); @@ -1076,15 +1075,6 @@ retry_reparse_tag_cloud: free_alloca(pbuffer, use_heap_large); free(substitutename); - { - DWORD attrs = GetFileAttributesA(path); - if (!isVolume && (attrs & FILE_ATTRIBUTE_REPARSE_POINT)) { - free_alloca(tmp, use_heap); - FREE_PATHW() - goto retry_reparse_point; - } - } - if(isabsolute == 1) { if (!((j == 3) && (path[1] == ':') && (path[2] == '\\'))) { /* use_realpath is 0 in the call below coz path is absolute*/ diff --git a/ext/standard/tests/file/realpath_basic4.phpt b/ext/standard/tests/file/realpath_basic4.phpt index 5f18dd9841..d782b6d618 100644 --- a/ext/standard/tests/file/realpath_basic4.phpt +++ b/ext/standard/tests/file/realpath_basic4.phpt @@ -1,5 +1,11 @@ --TEST-- Test realpath() with relative paths +--SKIPIF-- + --FILE--