Skip to content

Commit e2be500

Browse files
committed
Merge branch 'PHP-7.4'
* PHP-7.4: Enable readlink_realpath_* tests on Windows
2 parents 16cb88f + 6f0b733 commit e2be500

9 files changed

+323
-15
lines changed

ext/standard/tests/file/readlink_realpath_basic1.phpt

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
Test readlink() and realpath functions: basic functionality - diff. path notation for links(Bug #42038)
33
--SKIPIF--
44
<?php
5-
if (substr(PHP_OS, 0, 3) == 'WIN') {
6-
die('skip no symlinks on Windows');
5+
if (PHP_OS_FAMILY === 'Windows') {
6+
include __DIR__ . '/windows_links/common.inc';
7+
skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
78
}
89
?>
910
--FILE--
@@ -67,32 +68,32 @@ rmdir("$name_prefix/");
6768
*** Testing readlink() and realpath(): with valid and invalid path ***
6869

6970
-- Iteration 1 --
70-
string(%d) "%s/readlink_realpath_basic1/home/readlink_realpath_basic1.tmp"
71-
string(%d) "%s/readlink_realpath_basic1/home/readlink_realpath_basic1.tmp"
71+
string(%d) "%s%ereadlink_realpath_basic1%ehome%ereadlink_realpath_basic1.tmp"
72+
string(%d) "%s%ereadlink_realpath_basic1%ehome%ereadlink_realpath_basic1.tmp"
7273

7374
-- Iteration 2 --
74-
string(%d) "%s/readlink_realpath_basic1/home/test/readlink_realpath_basic1.tmp"
75-
string(%d) "%s/readlink_realpath_basic1/home/test/readlink_realpath_basic1.tmp"
75+
string(%d) "%s%ereadlink_realpath_basic1%ehome%etest%ereadlink_realpath_basic1.tmp"
76+
string(%d) "%s%ereadlink_realpath_basic1%ehome%etest%ereadlink_realpath_basic1.tmp"
7677

7778
-- Iteration 3 --
78-
string(%d) "%s/readlink_realpath_basic1/home/test/readlink_realpath_basic1.tmp"
79-
string(%d) "%s/readlink_realpath_basic1/home/test/readlink_realpath_basic1.tmp"
79+
string(%d) "%s%ereadlink_realpath_basic1%ehome%etest%ereadlink_realpath_basic1.tmp"
80+
string(%d) "%s%ereadlink_realpath_basic1%ehome%etest%ereadlink_realpath_basic1.tmp"
8081

8182
-- Iteration 4 --
8283

83-
Warning: readlink(): No such file or directory in %s on line %d
84+
Warning: readlink(): %s in %s on line %d
8485
bool(false)
8586
bool(false)
8687

8788
-- Iteration 5 --
8889

89-
Warning: readlink(): No such file or directory in %s on line %d
90+
Warning: readlink(): %s in %s on line %d
9091
bool(false)
9192
bool(false)
9293

9394
-- Iteration 6 --
9495

95-
Warning: readlink(): No such file or directory in %s on line %d
96+
Warning: readlink(): %s in %s on line %d
9697
bool(false)
9798
%s
9899

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
--TEST--
2+
Test readlink() and realpath functions: basic functionality - diff. path notation for files
3+
--SKIPIF--
4+
<?php
5+
if (substr(PHP_OS, 0, 3) != 'WIN') {
6+
die('skip only for Windows');
7+
}
8+
?>
9+
--FILE--
10+
<?php
11+
/* creating directories, symbolic links and files */
12+
$file_path = __DIR__;
13+
mkdir("$file_path/readlink_realpath_basic2/home/test/", 0777, true);
14+
15+
$file_handle1 = fopen("$file_path/readlink_realpath_basic2/home/test/readlink_realpath_basic2.tmp", "w");
16+
$file_handle2 = fopen("$file_path/readlink_realpath_basic2/home/readlink_realpath_basic2.tmp", "w");
17+
$file_handle3 = fopen("$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp", "w");
18+
fclose($file_handle1);
19+
fclose($file_handle2);
20+
fclose($file_handle3);
21+
22+
echo "\n*** Testing realpath() on filenames ***\n";
23+
$filenames = array (
24+
/* filenames resulting in valid paths */
25+
"$file_path/readlink_realpath_basic2/home/readlink_realpath_basic2.tmp",
26+
"$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp",
27+
"$file_path/readlink_realpath_basic2//home/test//../test/./readlink_realpath_basic2.tmp",
28+
"$file_path/readlink_realpath_basic2/home//../././readlink_realpath_basic2.tmp",
29+
30+
/* filenames with invalid path */
31+
"$file_path///readlink_realpath_basic2/home//..//././test//readlink_realpath_basic2.tmp",
32+
"$file_path/readlink_realpath_basic2/home/../home/../test/../readlink_realpath_basic2.tmp",
33+
"$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp/"
34+
);
35+
36+
$counter = 1;
37+
/* loop through $files to read the filepath of $file in the above array */
38+
foreach($filenames as $file) {
39+
echo "\n-- Iteration $counter --\n";
40+
var_dump( realpath($file) );
41+
$counter++;
42+
}
43+
44+
echo "Done\n";
45+
?>
46+
--CLEAN--
47+
<?php
48+
$name_prefix = __DIR__."/readlink_realpath_basic2";
49+
unlink("$name_prefix/home/test/readlink_realpath_basic2.tmp");
50+
unlink("$name_prefix/home/readlink_realpath_basic2.tmp");
51+
unlink("$name_prefix/readlink_realpath_basic2.tmp");
52+
rmdir("$name_prefix/home/test/");
53+
rmdir("$name_prefix/home/");
54+
rmdir("$name_prefix/");
55+
?>
56+
--EXPECTF--
57+
*** Testing realpath() on filenames ***
58+
59+
-- Iteration 1 --
60+
string(%d) "%s%ereadlink_realpath_basic2%ehome%ereadlink_realpath_basic2.tmp"
61+
62+
-- Iteration 2 --
63+
string(%d) "%s%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
64+
65+
-- Iteration 3 --
66+
string(%d) "%s%ereadlink_realpath_basic2%ehome%etest%ereadlink_realpath_basic2.tmp"
67+
68+
-- Iteration 4 --
69+
string(%d) "%s%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
70+
71+
-- Iteration 5 --
72+
bool(false)
73+
74+
-- Iteration 6 --
75+
string(%d) "%s%eext%estandard%etests%efile%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
76+
77+
-- Iteration 7 --
78+
%s
79+
Done

ext/standard/tests/file/readlink_realpath_basic2.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Test readlink() and realpath functions: basic functionality - diff. path notatio
33
--SKIPIF--
44
<?php
55
if (substr(PHP_OS, 0, 3) == 'WIN') {
6-
die('skip no symlinks on Windows');
6+
die('skip not for Windows');
77
}
88
?>
99
--FILE--
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
--TEST--
2+
Test readlink() and realpath() functions: error conditions
3+
--SKIPIF--
4+
<?php
5+
if (substr(PHP_OS, 0, 3) != 'WIN') {
6+
die('skip only for Windows');
7+
}
8+
?>
9+
--FILE--
10+
<?php
11+
echo "\n*** Testing readlink() on a non-existent link ***\n";
12+
var_dump( readlink(__DIR__."/readlink_error.tmp") );
13+
14+
echo "\n*** Testing readlink() on existing file ***\n";
15+
var_dump( readlink(__FILE__) );
16+
17+
echo "\n*** Testing readlink() on existing directory ***\n";
18+
var_dump( readlink(__DIR__) );
19+
20+
echo "\n*** Testing realpath() on a non-existent file ***\n";
21+
var_dump( realpath(__DIR__."/realpath_error.tmp") );
22+
23+
echo "Done\n";
24+
?>
25+
--EXPECTF--
26+
*** Testing readlink() on a non-existent link ***
27+
28+
Warning: readlink(): readlink failed to read the symbolic link (%s, error %d) in %s on line %d
29+
bool(false)
30+
31+
*** Testing readlink() on existing file ***
32+
string(%d) "%s%eext%estandard%etests%efile%ereadlink_realpath_error-win32.php"
33+
34+
*** Testing readlink() on existing directory ***
35+
string(%d) "%s%eext%estandard%etests%efile"
36+
37+
*** Testing realpath() on a non-existent file ***
38+
%s
39+
Done

ext/standard/tests/file/readlink_realpath_error.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Test readlink() and realpath() functions: error conditions
33
--SKIPIF--
44
<?php
55
if (substr(PHP_OS, 0, 3) == 'WIN') {
6-
die('skip no symlinks on Windows');
6+
die('skip not for Windows');
77
}
88
?>
99
--FILE--
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
--TEST--
2+
Test readlink() and realpath() functions: usage variation - linkname/filename stored in object(Bug #42038)
3+
--SKIPIF--
4+
<?php
5+
if (substr(PHP_OS, 0, 3) != 'WIN') {
6+
die('skip only for Windows');
7+
} else {
8+
include __DIR__ . '/windows_links/common.inc';
9+
skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
10+
}
11+
?>
12+
--FILE--
13+
<?php
14+
echo "*** Testing readlink() and realpath() : usage variations ***\n";
15+
$name_prefix = __DIR__;
16+
$filename = "$name_prefix/readlink_realpath_variation1/home/tests/link/readlink_realpath_variation1.tmp";
17+
mkdir("$name_prefix/readlink_realpath_variation1/home/tests/link/", 0777, true);
18+
19+
echo "\n*** Testing readlink() and realpath() with linkname stored inside a object ***\n";
20+
// create a temp file
21+
$file_handle = fopen($filename, "w");
22+
fclose($file_handle);
23+
24+
// creating object with members as linkname
25+
class object_temp {
26+
public $linkname;
27+
function __construct($link) {
28+
$this->linkname = $link;
29+
}
30+
}
31+
$obj1 = new object_temp("$name_prefix/readlink_realpath_variation1/../././readlink_realpath_variation1/home/readlink_realpath_variation1_link.tmp");
32+
$obj2 = new object_temp("$name_prefix/readlink_realpath_variation1/home/../..///readlink_realpath_variation1_link.tmp");
33+
34+
echo "\n-- Testing readlink() and realpath() with softlink, linkname stored inside an object --\n";
35+
// creating the links
36+
var_dump( symlink($filename, $obj1->linkname) );
37+
var_dump( readlink($obj1->linkname) );
38+
var_dump( realpath($obj1->linkname) );
39+
var_dump( symlink($filename, $obj2->linkname) );
40+
var_dump( readlink($obj2->linkname) );
41+
var_dump( realpath($obj2->linkname) );
42+
43+
// deleting the link
44+
unlink($obj1->linkname);
45+
unlink($obj2->linkname);
46+
47+
echo "\n-- Testing readlink() and realpath() with hardlink, linkname stored inside an object --\n";
48+
// creating hard links
49+
var_dump( link($filename, $obj1->linkname) );
50+
var_dump( readlink($obj1->linkname) ); // invalid because readlink doesn't work with hardlink
51+
var_dump( realpath($obj1->linkname) );
52+
var_dump( link($filename, $obj2->linkname) );
53+
var_dump( readlink($obj2->linkname) ); // invalid because readlink doesn't work with hardlink
54+
var_dump( realpath($obj2->linkname) );
55+
56+
// delete the links
57+
unlink($obj1->linkname);
58+
unlink($obj2->linkname);
59+
60+
echo "Done\n";
61+
?>
62+
--CLEAN--
63+
<?php
64+
$name_prefix = __DIR__."/readlink_realpath_variation1";
65+
unlink("$name_prefix/home/tests/link/readlink_realpath_variation1.tmp");
66+
rmdir("$name_prefix/home/tests/link/");
67+
rmdir("$name_prefix/home/tests/");
68+
rmdir("$name_prefix/home/");
69+
rmdir("$name_prefix/");
70+
?>
71+
--EXPECTF--
72+
*** Testing readlink() and realpath() : usage variations ***
73+
74+
*** Testing readlink() and realpath() with linkname stored inside a object ***
75+
76+
-- Testing readlink() and realpath() with softlink, linkname stored inside an object --
77+
bool(true)
78+
string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
79+
string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
80+
bool(true)
81+
string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
82+
string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
83+
84+
-- Testing readlink() and realpath() with hardlink, linkname stored inside an object --
85+
bool(true)
86+
string(%d) "%s%ereadlink_realpath_variation1%ehome%ereadlink_realpath_variation1_link.tmp"
87+
string(%d) "%s%ereadlink_realpath_variation1%ehome%ereadlink_realpath_variation1_link.tmp"
88+
bool(true)
89+
string(%d) "%s%ereadlink_realpath_variation1_link.tmp"
90+
string(%d) "%s%ereadlink_realpath_variation1_link.tmp"
91+
Done

ext/standard/tests/file/readlink_realpath_variation1.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Test readlink() and realpath() functions: usage variation - linkname/filename st
33
--SKIPIF--
44
<?php
55
if (substr(PHP_OS, 0, 3) == 'WIN') {
6-
die('skip no symlinks on Windows');
6+
die('skip not for Windows');
77
}
88
?>
99
--FILE--
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
--TEST--
2+
Test readlink() and realpath() functions: usage variation - linkname/filename stored in array(Bug #42038)
3+
--SKIPIF--
4+
<?php
5+
if (substr(PHP_OS, 0, 3) != 'WIN') {
6+
die('skip only for Windows');
7+
} else {
8+
include __DIR__ . '/windows_links/common.inc';
9+
skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
10+
}
11+
?>
12+
--FILE--
13+
<?php
14+
echo "*** Testing readlink() and realpath() : usage variations ***\n";
15+
$name_prefix = __DIR__;
16+
// create temp dir
17+
mkdir("$name_prefix/readlink_realpath_variation2/home/tests/link/", 0777, true);
18+
// create the file
19+
$filename = "$name_prefix/readlink_realpath_variation2/home/tests/link/readlink_realpath_variation2.tmp";
20+
$fp = fopen($filename, "w");
21+
fclose($fp);
22+
23+
echo "\n*** Testing readlink() and realpath() with linkname stored in an array ***\n";
24+
$link_arr = array (
25+
"$name_prefix////readlink_realpath_variation2/home/tests/link/readlink_realpath_variation2_link.tmp",
26+
"$name_prefix/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/"
27+
);
28+
29+
echo "\n-- Testing readlink() and realpath() with softlink, linkname stored inside an array --\n";
30+
// creating the links
31+
var_dump( symlink($filename, $link_arr[0]) );
32+
var_dump( readlink($link_arr[0]) );
33+
var_dump( realpath($link_arr[0]) );
34+
var_dump( symlink($filename, $link_arr[1]) );
35+
var_dump( readlink($link_arr[1]) );
36+
var_dump( realpath($link_arr[1]) );
37+
38+
// deleting the link
39+
unlink($link_arr[0]);
40+
unlink($link_arr[1]);
41+
42+
echo "\n-- Testing readlink() and realpath() with hardlink, linkname stored inside an array --\n";
43+
// creating hard links
44+
var_dump( link($filename, $link_arr[0]) );
45+
var_dump( readlink($link_arr[0]) ); // invalid because readlink doesn't work with hardlink
46+
var_dump( realpath($link_arr[0]) );
47+
var_dump( link($filename, $link_arr[1]) );
48+
var_dump( readlink($link_arr[1]) ); // invalid because readlink doesn't work with hardlink
49+
var_dump( realpath($link_arr[1]) );
50+
51+
// delete the links
52+
unlink($link_arr[0]);
53+
unlink($link_arr[1]);
54+
55+
echo "Done\n";
56+
?>
57+
--CLEAN--
58+
<?php
59+
$name_prefix = __DIR__."/readlink_realpath_variation2";
60+
unlink("$name_prefix/home/tests/link/readlink_realpath_variation2.tmp");
61+
rmdir("$name_prefix/home/tests/link/");
62+
rmdir("$name_prefix/home/tests/");
63+
rmdir("$name_prefix/home/");
64+
rmdir("$name_prefix/");
65+
?>
66+
--EXPECTF--
67+
*** Testing readlink() and realpath() : usage variations ***
68+
69+
*** Testing readlink() and realpath() with linkname stored in an array ***
70+
71+
-- Testing readlink() and realpath() with softlink, linkname stored inside an array --
72+
bool(true)
73+
string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2.tmp"
74+
string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2.tmp"
75+
76+
Warning: symlink(): No such file or directory in %s on line %d
77+
bool(false)
78+
79+
Warning: readlink(): readlink failed to read the symbolic link (%s) in %s on line %d
80+
bool(false)
81+
bool(false)
82+
83+
Warning: unlink(%s/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/): No such file or directory in %s on line %d
84+
85+
-- Testing readlink() and realpath() with hardlink, linkname stored inside an array --
86+
bool(true)
87+
string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2_link.tmp"
88+
string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2_link.tmp"
89+
90+
Warning: link(): No such file or directory in %s on line %d
91+
bool(false)
92+
93+
Warning: readlink(): readlink failed to read the symbolic link (%s) in %s on line %d
94+
bool(false)
95+
bool(false)
96+
97+
Warning: unlink(%s/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/): No such file or directory in %s on line %d
98+
Done

0 commit comments

Comments
 (0)