com php-src: Fixed bug #73962 bug with symlink related to cyrillic directory: NEWS Zend/zend_virtual_cwd.c ext/standard/te
sts/file/windows_links/bug73962.phpt

From: Date: Fri, 20 Jan 2017 22:45:08 +0000
Subject: com php-src: Fixed bug #73962 bug with symlink related to cyrillic directory: NEWS Zend/zend_virtual_cwd.c ext/standard/te
sts/file/windows_links/bug73962.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-96821@lists.php.net to get a copy of this message
Commit: 95406c878a9cc25ad1e831e619afba683e92f05a Author: Anatol Belski <ab@php.net> Fri, 20 Jan 2017 23:45:08 +0100 Parents: d6feb2edbdc95b2db1ec09f011595de0204b2fa1 Branches: PHP-7.1 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=95406c878a9cc25ad1e831e619afba683e92f05a Log: Fixed bug #73962 bug with symlink related to cyrillic directory Bugs: https://bugs.php.net/73962 Changed paths: M NEWS M Zend/zend_virtual_cwd.c A ext/standard/tests/file/windows_links/bug73962.phpt Diff: diff --git a/NEWS b/NEWS index 65856c6..baed446 100644 --- a/NEWS +++ b/NEWS @@ -7,6 +7,7 @@ PHP NEWS . Fixed bug #73877 (readlink() returns garbage for UTF-8 paths). (Anatol) . Fixed bug #73876 (Crash when exporting **= in expansion of assign op). (Sara) + . Fixed bug #73962 (bug with symlink related to cyrillic directory). (Anatol) - DTrace: . Fixed bug #73965 (DTrace reported as enabled when disabled). (Remi) diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c index 5334348..9c2dc29 100644 --- a/Zend/zend_virtual_cwd.c +++ b/Zend/zend_virtual_cwd.c @@ -914,7 +914,7 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i wchar_t * reparsetarget; BOOL isVolume = FALSE; char *printname = NULL, *substitutename = NULL; - int substitutename_len; + size_t substitutename_len; int substitutename_off = 0; if(++(*ll) > LINK_MAX) { @@ -959,7 +959,8 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i } substitutename_len = pbuffer->MountPointReparseBuffer.SubstituteNameLength / sizeof(WCHAR); - substitutename = php_win32_ioutil_w_to_any(reparsetarget + pbuffer->MountPointReparseBuffer.SubstituteNameOffset / sizeof(WCHAR)); + substitutename = php_win32_cp_conv_w_to_any(reparsetarget + pbuffer->MountPointReparseBuffer.SubstituteNameOffset / sizeof(WCHAR), + substitutename_len, &substitutename_len); if (!substitutename) { free_alloca(pbuffer, use_heap_large); free_alloca(tmp, use_heap); @@ -981,7 +982,8 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i substitutename_len = pbuffer->MountPointReparseBuffer.SubstituteNameLength / sizeof(WCHAR); - substitutename = php_win32_ioutil_w_to_any(reparsetarget + pbuffer->MountPointReparseBuffer.SubstituteNameOffset / sizeof(WCHAR)); + substitutename = php_win32_cp_conv_w_to_any(reparsetarget + pbuffer->MountPointReparseBuffer.SubstituteNameOffset / sizeof(WCHAR), + substitutename_len, &substitutename_len); if (!substitutename) { free_alloca(pbuffer, use_heap_large); free_alloca(tmp, use_heap); diff --git a/ext/standard/tests/file/windows_links/bug73962.phpt b/ext/standard/tests/file/windows_links/bug73962.phpt new file mode 100644 index 0000000..6d57838 --- /dev/null +++ b/ext/standard/tests/file/windows_links/bug73962.phpt @@ -0,0 +1,77 @@ +--TEST-- +Bug #73962 bug with symlink related to cyrillic directory +--SKIPIF-- +<?php +if(substr(PHP_OS, 0, 3) != 'WIN' ) { + die('skip windows only test'); +} +include_once __DIR__ . '/common.inc'; +$ret = exec('mklink bug48746_tmp.lnk ' . __FILE__ .' 2>&1', $out); +if (strpos($ret, 'privilege')) { + die('skip. SeCreateSymbolicLinkPrivilege not enable for this user.'); +} +unlink('bug48746_tmp.lnk'); +?> +--FILE-- +<?php +include_once __DIR__ . '/common.inc'; +$mountvol = get_mountvol(); +$old_dir = __DIR__; +$dirname = '"' . __DIR__ . "\\mnt\\test\\новая папка" . '"'; +exec("mkdir " . $dirname, $output, $ret_val); +chdir(__DIR__ . "\\mnt\\test"); +$drive = substr(__DIR__, 0, 2); +$pathwithoutdrive = substr(__DIR__, 2); +$ret = exec($mountvol . " " . $drive . " /L", $output, $ret_val); +exec("mklink /d mounted_volume " . $ret, $output, $ret_val); +$fullpath = "mounted_volume" . $pathwithoutdrive; +exec("mklink /d mklink_symlink \"новая папка\"", $output, $ret_val); +file_put_contents("mklink_symlink\\a.php", "<?php echo \"I am included.\n\" ?>"); +file_put_contents("$fullpath\\mnt\\test\\новая папка\\b.php", "<?php echo \"I am included.\n\" ?>"); +var_dump(scandir("mklink_symlink")); +var_dump(scandir("$fullpath\\mnt\\test\\новая папка")); +var_dump(scandir("$fullpath\\mnt\\test\\mklink_symlink")); +var_dump(is_readable("$fullpath\\mnt\\test\\mklink_symlink\b.php")); +unlink("$fullpath\\mnt\\test\\новая папка\\b.php"); +unlink("mklink_symlink\\a.php"); +chdir($old_dir); +rmdir(__DIR__ . "\\mnt\\test\\новая папка"); +rmdir(__DIR__ . "\\mnt\\test\\mklink_symlink"); +rmdir(__DIR__ . "\\mnt\\test\\mounted_volume"); +rmdir(__DIR__ . "\\mnt\\test"); +rmdir(__DIR__ . "\\mnt"); + +?> +--EXPECT-- +array(4) { + [0]=> + string(1) "." + [1]=> + string(2) ".." + [2]=> + string(5) "a.php" + [3]=> + string(5) "b.php" +} +array(4) { + [0]=> + string(1) "." + [1]=> + string(2) ".." + [2]=> + string(5) "a.php" + [3]=> + string(5) "b.php" +} +array(4) { + [0]=> + string(1) "." + [1]=> + string(2) ".." + [2]=> + string(5) "a.php" + [3]=> + string(5) "b.php" +} +bool(true) +

« previous php.cvs (#96821) next »