summaryrefslogtreecommitdiff
path: root/ext/standard/tests/file
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2018-07-12 19:57:08 +0200
committerAnatol Belski <ab@php.net>2018-07-12 19:57:08 +0200
commitf28aeaee057dcf4593bae3572c6fc8febaff6d72 (patch)
tree26c4bd670480295792aa90988f28bb7e00b54128 /ext/standard/tests/file
parent77ced46dea846615385eb63abe2c5d386df4e78e (diff)
parent99fe18503ad61472ef8f4009a9234bfc2571d027 (diff)
downloadphp-git-f28aeaee057dcf4593bae3572c6fc8febaff6d72.tar.gz
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1: Fixed RecursiveDirectoryIterator with long path or with edge case length
Diffstat (limited to 'ext/standard/tests/file')
-rw-r--r--ext/standard/tests/file/windows_mb_path/recursive_it.phpt65
1 files changed, 65 insertions, 0 deletions
diff --git a/ext/standard/tests/file/windows_mb_path/recursive_it.phpt b/ext/standard/tests/file/windows_mb_path/recursive_it.phpt
new file mode 100644
index 0000000000..f0f5f40e70
--- /dev/null
+++ b/ext/standard/tests/file/windows_mb_path/recursive_it.phpt
@@ -0,0 +1,65 @@
+--TEST--
+RecursiveDirectoryIterator with dir path long or of edge case length
+--SKIPIF--
+<?php
+include dirname(__FILE__) . DIRECTORY_SEPARATOR . "util.inc";
+
+skip_if_not_win();
+
+if (strlen(dirname(__FILE__)) > 259) die("Unsuitable starting path length");
+?>
+--FILE--
+<?php
+
+$need_len = 1024;
+//$need_len = 259;
+$dir = dirname(__FILE__);
+while ($need_len - strlen($dir) > 32) {
+ $dir .= DIRECTORY_SEPARATOR . str_repeat("a", 32);
+}
+$dir .= DIRECTORY_SEPARATOR . str_repeat("a", $need_len - strlen($dir));
+mkdir($dir, 0700, true);
+
+$fl = $dir . DIRECTORY_SEPARATOR . "hello.txt";
+file_put_contents($fl, "");
+
+
+$start = substr($dir, 0, strpos($dir, DIRECTORY_SEPARATOR, strlen(dirname(__FILE__))+1));
+$iter = new RecursiveIteratorIterator(
+ new RecursiveDirectoryIterator(
+ $start,
+ FilesystemIterator::SKIP_DOTS
+ ),
+ RecursiveIteratorIterator::CHILD_FIRST
+);
+
+foreach ($iter as $item) {
+ if (!$item->isDir()) {
+ var_dump($item->getPathname());
+ }
+}
+
+$iter->rewind();
+foreach ($iter as $item) {
+ if ($item->isDir()) {
+ rmdir($item->getPathname());
+ } else {
+ unlink($item->getPathname());
+ }
+}
+rmdir($start);
+var_dump(file_exists($start));
+
+/*unlink($fl);
+do {
+ rmdir($dir);
+ $dir = dirname($dir);
+} while (dirname(__FILE__) != $dir);*/
+
+?>
+==DONE==
+--EXPECTF--
+string(%d) "%shello.txt"
+bool(false)
+==DONE==
+