mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
MFH:
Do not expand $target in symlink(). This made it impossible to symlink to a symlink. This also caused the target to be wrongly expanded relatively to the CWD when target was not an absolute path.
This commit is contained in:
parent
5c7e2072c6
commit
f1917e104b
@ -149,11 +149,11 @@ PHP_FUNCTION(symlink)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
#ifndef ZTS
|
||||
ret = symlink(topath, frompath);
|
||||
#else
|
||||
ret = symlink(dest_p, source_p);
|
||||
#endif
|
||||
/* For the source, an expanded path must be used (in ZTS an other thread could have changed the CWD).
|
||||
* For the target the exact string given by the user must be used, relative or not, existing or not.
|
||||
* The target is relative to the link itself, not to the CWD. */
|
||||
ret = symlink(topath, source_p);
|
||||
|
||||
if (ret == -1) {
|
||||
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", strerror(errno));
|
||||
RETURN_FALSE;
|
||||
|
44
ext/standard/tests/file/symlink_to_symlink.phpt
Normal file
44
ext/standard/tests/file/symlink_to_symlink.phpt
Normal file
@ -0,0 +1,44 @@
|
||||
--TEST--
|
||||
symlink() using a relative path, and symlink() to a symlink
|
||||
--FILE--
|
||||
<?php
|
||||
$prefix = __FILE__;
|
||||
|
||||
touch($prefix . "_file");
|
||||
|
||||
// symlink to a regular file using a relative dest
|
||||
symlink(basename($prefix . "_file"), $prefix . "_link1");
|
||||
|
||||
// symlink to a symlink using a relative path
|
||||
symlink(basename($prefix . "_link1"), $prefix . "_link2");
|
||||
|
||||
// symlink to a non-existent path
|
||||
@unlink($prefix . "_nonexistant");
|
||||
symlink(basename($prefix . "_nonexistant"), $prefix . "_link3");
|
||||
|
||||
// symlink to a regular file using an absolute path
|
||||
symlink($prefix . "_file", $prefix . "_link4");
|
||||
|
||||
// symlink to a symlink using an absolute path
|
||||
symlink($prefix . "_link4", $prefix . "_link5");
|
||||
|
||||
var_dump(readlink($prefix . "_link1"));
|
||||
var_dump(readlink($prefix . "_link2"));
|
||||
var_dump(readlink($prefix . "_link3"));
|
||||
var_dump(readlink($prefix . "_link4"));
|
||||
var_dump(readlink($prefix . "_link5"));
|
||||
|
||||
unlink($prefix . "_link5");
|
||||
unlink($prefix . "_link4");
|
||||
unlink($prefix . "_link3");
|
||||
unlink($prefix . "_link2");
|
||||
unlink($prefix . "_link1");
|
||||
unlink($prefix . "_file");
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
%unicode|string%(%d) "symlink_to_symlink.php_file"
|
||||
%unicode|string%(%d) "symlink_to_symlink.php_link1"
|
||||
%unicode|string%(%d) "symlink_to_symlink.php_nonexistant"
|
||||
%unicode|string%(%d) "%s/symlink_to_symlink.php_file"
|
||||
%unicode|string%(%d) "%s/symlink_to_symlink.php_link4"
|
Loading…
Reference in New Issue
Block a user