Merge branch 'PHP-7.1'

* PHP-7.1:
  Fixed bug #73962 bug with symlink related to cyrillic directory
This commit is contained in:
Anatol Belski 2017-01-20 23:47:12 +01:00
commit 73bfa264cc
2 changed files with 82 additions and 3 deletions

View file

@ -849,7 +849,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) {
@ -894,7 +894,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);
@ -916,7 +917,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);

View file

@ -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)