From: Anatol Belski Date: Thu, 1 Sep 2016 19:31:40 +0000 (+0200) Subject: rewrite the getcwd part X-Git-Tag: php-7.2.0alpha1~1381^2~4 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ac82a3418507b7f292783c7281cadf3388b9db0b;p=php rewrite the getcwd part Also fixes a possible memory leak. Still not ideal, as seems CWD longer than MAX_PATH is still not supported. But a heap allocation is not needed anyway, as MAXPATHLEN value is the maximum supported. --- diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c index ce5f1ff066..be2dd0da57 100644 --- a/Zend/zend_virtual_cwd.c +++ b/Zend/zend_virtual_cwd.c @@ -328,32 +328,19 @@ CWD_API int php_sys_stat_ex(const char *path, zend_stat_t *buf, int lstat) /* {{ buf->st_dev = buf->st_rdev = 0; } else { wchar_t cur_path[MAXPATHLEN+1]; - DWORD len = sizeof(cur_path); - wchar_t *tmp = cur_path; - - while(1) { - DWORD r = GetCurrentDirectoryW(len, tmp); - if (r < len) { - if (tmp[1] == L':') { - if (pathw[0] >= L'A' && pathw[0] <= L'Z') { - buf->st_dev = buf->st_rdev = pathw[0] - L'A'; - } else { - buf->st_dev = buf->st_rdev = pathw[0] - L'a'; - } + + if (NULL != _wgetcwd(cur_path, sizeof(cur_path)/sizeof(wchar_t))) { + if (cur_path[1] == L':') { + if (pathw[0] >= L'A' && pathw[0] <= L'Z') { + buf->st_dev = buf->st_rdev = pathw[0] - L'A'; } else { - buf->st_dev = buf->st_rdev = -1; + buf->st_dev = buf->st_rdev = pathw[0] - L'a'; } - break; - } else if (!r) { - buf->st_dev = buf->st_rdev = -1; - break; } else { - len = r+1; - tmp = (wchar_t*)malloc(len*sizeof(wchar_t)); + buf->st_dev = buf->st_rdev = -1; } - } - if (tmp != cur_path) { - free(tmp); + } else { + buf->st_dev = buf->st_rdev = -1; } }