From: Arnaud Le Blanc Date: Sun, 10 Aug 2008 11:54:18 +0000 (+0000) Subject: Do not expand $target in symlink(). This made it impossible to symlink to a X-Git-Tag: BEFORE_HEAD_NS_CHANGE~797 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=726dfc423da8e08380d6b8252731efdf6c2e6c3d;p=php 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. --- diff --git a/ext/standard/link.c b/ext/standard/link.c index a2517580c1..1b97a4da03 100644 --- a/ext/standard/link.c +++ b/ext/standard/link.c @@ -154,11 +154,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; diff --git a/ext/standard/tests/file/symlink_to_symlink.phpt b/ext/standard/tests/file/symlink_to_symlink.phpt new file mode 100644 index 0000000000..cf12a1d0b7 --- /dev/null +++ b/ext/standard/tests/file/symlink_to_symlink.phpt @@ -0,0 +1,44 @@ +--TEST-- +symlink() using a relative path, and symlink() to a symlink +--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"