]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorChristoph M. Becker <cmbecker69@gmx.de>
Thu, 2 Jul 2020 16:29:39 +0000 (18:29 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Thu, 2 Jul 2020 16:31:43 +0000 (18:31 +0200)
* PHP-7.4:
  Enable readlink_realpath_* tests on Windows

1  2 
ext/standard/tests/file/readlink_realpath_basic1.phpt
ext/standard/tests/file/readlink_realpath_basic2-win32.phpt
ext/standard/tests/file/readlink_realpath_basic2.phpt
ext/standard/tests/file/readlink_realpath_error-win32.phpt
ext/standard/tests/file/readlink_realpath_error.phpt
ext/standard/tests/file/readlink_realpath_variation1-win32.phpt
ext/standard/tests/file/readlink_realpath_variation1.phpt
ext/standard/tests/file/readlink_realpath_variation2-win32.phpt
ext/standard/tests/file/readlink_realpath_variation2.phpt

index 0000000000000000000000000000000000000000,f0072eec9b31e51e51b630cb520f0d999e399135..47023fc957441b69dc962eadfbcb4b5ba32bfc4d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,86 +1,79 @@@
 -/* Prototype: string readlink ( string $path );
 -   Description: Returns the target of a symbolic link
 -
 -   Prototype: string realpath ( string $path );
 -   Description: Returns canonicalized absolute pathname
 -*/
 -
+ --TEST--
+ Test readlink() and realpath functions: basic functionality - diff. path notation for files
+ --SKIPIF--
+ <?php
+ if (substr(PHP_OS, 0, 3) != 'WIN') {
+     die('skip only for Windows');
+ }
+ ?>
+ --FILE--
+ <?php
+ /* creating directories, symbolic links and files */
+ $file_path = __DIR__;
+ mkdir("$file_path/readlink_realpath_basic2/home/test/", 0777, true);
+ $file_handle1 = fopen("$file_path/readlink_realpath_basic2/home/test/readlink_realpath_basic2.tmp", "w");
+ $file_handle2 = fopen("$file_path/readlink_realpath_basic2/home/readlink_realpath_basic2.tmp", "w");
+ $file_handle3 = fopen("$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp", "w");
+ fclose($file_handle1);
+ fclose($file_handle2);
+ fclose($file_handle3);
+ echo "\n*** Testing realpath() on filenames ***\n";
+ $filenames = array (
+   /* filenames resulting in valid paths */
+   "$file_path/readlink_realpath_basic2/home/readlink_realpath_basic2.tmp",
+   "$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp",
+   "$file_path/readlink_realpath_basic2//home/test//../test/./readlink_realpath_basic2.tmp",
+   "$file_path/readlink_realpath_basic2/home//../././readlink_realpath_basic2.tmp",
+   /* filenames with invalid path */
+   "$file_path///readlink_realpath_basic2/home//..//././test//readlink_realpath_basic2.tmp",
+   "$file_path/readlink_realpath_basic2/home/../home/../test/../readlink_realpath_basic2.tmp",
+   "$file_path/readlink_realpath_basic2/readlink_realpath_basic2.tmp/"
+ );
+ $counter = 1;
+ /* loop through $files to read the filepath of $file in the above array */
+ foreach($filenames as $file) {
+   echo "\n-- Iteration $counter --\n";
+   var_dump( realpath($file) );
+   $counter++;
+ }
+ echo "Done\n";
+ ?>
+ --CLEAN--
+ <?php
+ $name_prefix = __DIR__."/readlink_realpath_basic2";
+ unlink("$name_prefix/home/test/readlink_realpath_basic2.tmp");
+ unlink("$name_prefix/home/readlink_realpath_basic2.tmp");
+ unlink("$name_prefix/readlink_realpath_basic2.tmp");
+ rmdir("$name_prefix/home/test/");
+ rmdir("$name_prefix/home/");
+ rmdir("$name_prefix/");
+ ?>
+ --EXPECTF--
+ *** Testing realpath() on filenames ***
+ -- Iteration 1 --
+ string(%d) "%s%ereadlink_realpath_basic2%ehome%ereadlink_realpath_basic2.tmp"
+ -- Iteration 2 --
+ string(%d) "%s%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
+ -- Iteration 3 --
+ string(%d) "%s%ereadlink_realpath_basic2%ehome%etest%ereadlink_realpath_basic2.tmp"
+ -- Iteration 4 --
+ string(%d) "%s%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
+ -- Iteration 5 --
+ bool(false)
+ -- Iteration 6 --
+ string(%d) "%s%eext%estandard%etests%efile%ereadlink_realpath_basic2%ereadlink_realpath_basic2.tmp"
+ -- Iteration 7 --
+ %s
+ Done
index 0000000000000000000000000000000000000000,679be4414c71f1a455d18e3cf7f5a664c4786725..c49beb2edae0be7a1e12c307ffc2c2e48165b7b0
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,69 +1,39 @@@
 -/* Prototype: string readlink ( string $path );
 -   Description: Returns the target of a symbolic link
 -
 -   Prototype: string realpath ( string $path );
 -   Description: Returns canonicalized absolute pathname
 -*/
 -
 -echo "*** Testing readlink(): error conditions ***\n";
 -var_dump( readlink() );  // args < expected
 -var_dump( readlink(__FILE__, 2) );  // args > expected
 -
+ --TEST--
+ Test readlink() and realpath() functions: error conditions
+ --SKIPIF--
+ <?php
+ if (substr(PHP_OS, 0, 3) != 'WIN') {
+     die('skip only for Windows');
+ }
+ ?>
+ --FILE--
+ <?php
 -echo "*** Testing realpath(): error conditions ***\n";
 -var_dump( realpath() );  // args < expected
 -var_dump( realpath(1, 2) );  // args > expected
 -
+ echo "\n*** Testing readlink() on a non-existent link ***\n";
+ var_dump( readlink(__DIR__."/readlink_error.tmp") );
+ echo "\n*** Testing readlink() on existing file ***\n";
+ var_dump( readlink(__FILE__) );
+ echo "\n*** Testing readlink() on existing directory ***\n";
+ var_dump( readlink(__DIR__) );
 -*** Testing readlink(): error conditions ***
 -
 -Warning: readlink() expects exactly 1 parameter, 0 given in %s on line %d
 -NULL
 -
 -Warning: readlink() expects exactly 1 parameter, 2 given in %s on line %d
 -NULL
 -
+ echo "\n*** Testing realpath() on a non-existent file ***\n";
+ var_dump( realpath(__DIR__."/realpath_error.tmp") );
+ echo "Done\n";
+ ?>
+ --EXPECTF--
 -*** Testing realpath(): error conditions ***
 -
 -Warning: realpath() expects exactly 1 parameter, 0 given in %s on line %d
 -NULL
 -
 -Warning: realpath() expects exactly 1 parameter, 2 given in %s on line %d
 -NULL
+ *** Testing readlink() on a non-existent link ***
+ Warning: readlink(): readlink failed to read the symbolic link (%s, error %d) in %s on line %d
+ bool(false)
+ *** Testing readlink() on existing file ***
+ string(%d) "%s%eext%estandard%etests%efile%ereadlink_realpath_error-win32.php"
+ *** Testing readlink() on existing directory ***
+ string(%d) "%s%eext%estandard%etests%efile"
+ *** Testing realpath() on a non-existent file ***
+ %s
+ Done
index 0000000000000000000000000000000000000000,b46944b23d9ffc53c7e28242b55ae8907d7475a1..5c7448f6a8b524e583eadb67f7120ec3fb7125d8
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,98 +1,91 @@@
 -/* Prototype: string readlink ( string $path );
 -   Description: Returns the target of a symbolic link
 -
 -   Prototype: string realpath ( string $path );
 -   Description: Returns canonicalized absolute pathname
 -*/
 -
+ --TEST--
+ Test readlink() and realpath() functions: usage variation - linkname/filename stored in object(Bug #42038)
+ --SKIPIF--
+ <?php
+ if (substr(PHP_OS, 0, 3) != 'WIN') {
+     die('skip only for Windows');
+ } else {
+     include __DIR__ . '/windows_links/common.inc';
+     skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
+ }
+ ?>
+ --FILE--
+ <?php
+ echo "*** Testing readlink() and realpath() : usage variations ***\n";
+ $name_prefix = __DIR__;
+ $filename = "$name_prefix/readlink_realpath_variation1/home/tests/link/readlink_realpath_variation1.tmp";
+ mkdir("$name_prefix/readlink_realpath_variation1/home/tests/link/", 0777, true);
+ echo "\n*** Testing readlink() and realpath() with linkname stored inside a object ***\n";
+ // create a temp file
+ $file_handle = fopen($filename, "w");
+ fclose($file_handle);
+ // creating object with members as linkname
+ class object_temp {
+   public $linkname;
+   function __construct($link) {
+     $this->linkname = $link;
+   }
+ }
+ $obj1 = new object_temp("$name_prefix/readlink_realpath_variation1/../././readlink_realpath_variation1/home/readlink_realpath_variation1_link.tmp");
+ $obj2 = new object_temp("$name_prefix/readlink_realpath_variation1/home/../..///readlink_realpath_variation1_link.tmp");
+ echo "\n-- Testing readlink() and realpath() with softlink, linkname stored inside an object --\n";
+ // creating the links
+ var_dump( symlink($filename, $obj1->linkname) );
+ var_dump( readlink($obj1->linkname) );
+ var_dump( realpath($obj1->linkname) );
+ var_dump( symlink($filename, $obj2->linkname) );
+ var_dump( readlink($obj2->linkname) );
+ var_dump( realpath($obj2->linkname) );
+ // deleting the link
+ unlink($obj1->linkname);
+ unlink($obj2->linkname);
+ echo "\n-- Testing readlink() and realpath() with hardlink, linkname stored inside an object --\n";
+ // creating hard links
+ var_dump( link($filename, $obj1->linkname) );
+ var_dump( readlink($obj1->linkname) );   // invalid because readlink doesn't work with hardlink
+ var_dump( realpath($obj1->linkname) );
+ var_dump( link($filename, $obj2->linkname) );
+ var_dump( readlink($obj2->linkname) );   // invalid because readlink doesn't work with hardlink
+ var_dump( realpath($obj2->linkname) );
+ // delete the links
+ unlink($obj1->linkname);
+ unlink($obj2->linkname);
+ echo "Done\n";
+ ?>
+ --CLEAN--
+ <?php
+ $name_prefix = __DIR__."/readlink_realpath_variation1";
+ unlink("$name_prefix/home/tests/link/readlink_realpath_variation1.tmp");
+ rmdir("$name_prefix/home/tests/link/");
+ rmdir("$name_prefix/home/tests/");
+ rmdir("$name_prefix/home/");
+ rmdir("$name_prefix/");
+ ?>
+ --EXPECTF--
+ *** Testing readlink() and realpath() : usage variations ***
+ *** Testing readlink() and realpath() with linkname stored inside a object ***
+ -- Testing readlink() and realpath() with softlink, linkname stored inside an object --
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%etests%elink%ereadlink_realpath_variation1.tmp"
+ -- Testing readlink() and realpath() with hardlink, linkname stored inside an object --
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%ereadlink_realpath_variation1_link.tmp"
+ string(%d) "%s%ereadlink_realpath_variation1%ehome%ereadlink_realpath_variation1_link.tmp"
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation1_link.tmp"
+ string(%d) "%s%ereadlink_realpath_variation1_link.tmp"
+ Done
index 0000000000000000000000000000000000000000,7c75f09b03e7043f6b9e84953572ac8fa3654c34..aea1fd0cc087110f8defc68ab5a3bd335f232df8
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,105 +1,98 @@@
 -/* Prototype: string readlink ( string $path );
 -   Description: Returns the target of a symbolic link
 -
 -   Prototype: string realpath ( string $path );
 -   Description: Returns canonicalized absolute pathname
 -*/
 -
+ --TEST--
+ Test readlink() and realpath() functions: usage variation - linkname/filename stored in array(Bug #42038)
+ --SKIPIF--
+ <?php
+ if (substr(PHP_OS, 0, 3) != 'WIN') {
+     die('skip only for Windows');
+ } else {
+     include __DIR__ . '/windows_links/common.inc';
+     skipIfSeCreateSymbolicLinkPrivilegeIsDisabled(__FILE__);
+ }
+ ?>
+ --FILE--
+ <?php
+ echo "*** Testing readlink() and realpath() : usage variations ***\n";
+ $name_prefix = __DIR__;
+ // create temp dir
+ mkdir("$name_prefix/readlink_realpath_variation2/home/tests/link/", 0777, true);
+ // create the file
+ $filename = "$name_prefix/readlink_realpath_variation2/home/tests/link/readlink_realpath_variation2.tmp";
+ $fp = fopen($filename, "w");
+ fclose($fp);
+ echo "\n*** Testing readlink() and realpath() with linkname stored in an array ***\n";
+ $link_arr = array (
+   "$name_prefix////readlink_realpath_variation2/home/tests/link/readlink_realpath_variation2_link.tmp",
+   "$name_prefix/./readlink_realpath_variation2/home/../home//tests//..//..//..//home//readlink_realpath_variation2_link.tmp/"
+ );
+ echo "\n-- Testing readlink() and realpath() with softlink, linkname stored inside an array --\n";
+ // creating the links
+ var_dump( symlink($filename, $link_arr[0]) );
+ var_dump( readlink($link_arr[0]) );
+ var_dump( realpath($link_arr[0]) );
+ var_dump( symlink($filename, $link_arr[1]) );
+ var_dump( readlink($link_arr[1]) );
+ var_dump( realpath($link_arr[1]) );
+ // deleting the link
+ unlink($link_arr[0]);
+ unlink($link_arr[1]);
+ echo "\n-- Testing readlink() and realpath() with hardlink, linkname stored inside an array --\n";
+ // creating hard links
+ var_dump( link($filename, $link_arr[0]) );
+ var_dump( readlink($link_arr[0]) );   // invalid because readlink doesn't work with hardlink
+ var_dump( realpath($link_arr[0]) );
+ var_dump( link($filename, $link_arr[1]) );
+ var_dump( readlink($link_arr[1]) );   // invalid because readlink doesn't work with hardlink
+ var_dump( realpath($link_arr[1]) );
+ // delete the links
+ unlink($link_arr[0]);
+ unlink($link_arr[1]);
+ echo "Done\n";
+ ?>
+ --CLEAN--
+ <?php
+ $name_prefix = __DIR__."/readlink_realpath_variation2";
+ unlink("$name_prefix/home/tests/link/readlink_realpath_variation2.tmp");
+ rmdir("$name_prefix/home/tests/link/");
+ rmdir("$name_prefix/home/tests/");
+ rmdir("$name_prefix/home/");
+ rmdir("$name_prefix/");
+ ?>
+ --EXPECTF--
+ *** Testing readlink() and realpath() : usage variations ***
+ *** Testing readlink() and realpath() with linkname stored in an array ***
+ -- Testing readlink() and realpath() with softlink, linkname stored inside an array --
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2.tmp"
+ string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2.tmp"
+ Warning: symlink(): No such file or directory in %s on line %d
+ bool(false)
+ Warning: readlink(): readlink failed to read the symbolic link (%s) in %s on line %d
+ bool(false)
+ bool(false)
+ 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
+ -- Testing readlink() and realpath() with hardlink, linkname stored inside an array --
+ bool(true)
+ string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2_link.tmp"
+ string(%d) "%s%ereadlink_realpath_variation2%ehome%etests%elink%ereadlink_realpath_variation2_link.tmp"
+ Warning: link(): No such file or directory in %s on line %d
+ bool(false)
+ Warning: readlink(): readlink failed to read the symbolic link (%s) in %s on line %d
+ bool(false)
+ bool(false)
+ 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
+ Done