mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-7.1'
* PHP-7.1: Fixed bug #73962 bug with symlink related to cyrillic directory
This commit is contained in:
commit
73bfa264cc
2 changed files with 82 additions and 3 deletions
|
@ -849,7 +849,7 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||||
wchar_t * reparsetarget;
|
wchar_t * reparsetarget;
|
||||||
BOOL isVolume = FALSE;
|
BOOL isVolume = FALSE;
|
||||||
char *printname = NULL, *substitutename = NULL;
|
char *printname = NULL, *substitutename = NULL;
|
||||||
int substitutename_len;
|
size_t substitutename_len;
|
||||||
int substitutename_off = 0;
|
int substitutename_off = 0;
|
||||||
|
|
||||||
if(++(*ll) > LINK_MAX) {
|
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_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) {
|
if (!substitutename) {
|
||||||
free_alloca(pbuffer, use_heap_large);
|
free_alloca(pbuffer, use_heap_large);
|
||||||
free_alloca(tmp, use_heap);
|
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_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) {
|
if (!substitutename) {
|
||||||
free_alloca(pbuffer, use_heap_large);
|
free_alloca(pbuffer, use_heap_large);
|
||||||
free_alloca(tmp, use_heap);
|
free_alloca(tmp, use_heap);
|
||||||
|
|
77
ext/standard/tests/file/windows_links/bug73962.phpt
Normal file
77
ext/standard/tests/file/windows_links/bug73962.phpt
Normal 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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue