. Convert resource<pspell> to object \PSpell. (Sara)
. Convert resource<pspell config> to object \PSpellConfig. (Sara)
+- SPL:
+ . Fixed bug #80724 (FilesystemIterator::FOLLOW_SYMLINKS remove KEY_AS_FILE
+ from bitmask). (Cameron Porter)
+
<<< NOTE: Insert NEWS from last stable release here prior to actual release! >>>
#define SPL_FILE_DIR_KEY_AS_PATHNAME 0x00000000 /* make RecursiveDirectoryTree::key() return getPathname() */
#define SPL_FILE_DIR_KEY_AS_FILENAME 0x00000100 /* make RecursiveDirectoryTree::key() return getFilename() */
-#define SPL_FILE_DIR_FOLLOW_SYMLINKS 0x00000200 /* make RecursiveDirectoryTree::hasChildren() follow symlinks */
#define SPL_FILE_DIR_KEY_MODE_MASK 0x00000F00 /* mask RecursiveDirectoryTree::key() */
#define SPL_FILE_DIR_KEY(intern,mode) ((intern->flags&SPL_FILE_DIR_KEY_MODE_MASK)==mode)
#define SPL_FILE_DIR_SKIPDOTS 0x00001000 /* Tells whether it should skip dots or not */
#define SPL_FILE_DIR_UNIXPATHS 0x00002000 /* Whether to unixify path separators */
-#define SPL_FILE_DIR_OTHERS_MASK 0x00003000 /* mask used for get/setFlags */
+#define SPL_FILE_DIR_FOLLOW_SYMLINKS 0x00004000 /* make RecursiveDirectoryTree::hasChildren() follow symlinks */
+#define SPL_FILE_DIR_OTHERS_MASK 0x00007000 /* mask used for get/setFlags */
#endif /* SPL_DIRECTORY_H */
--- /dev/null
+--TEST--
+SPL: RecursiveDirectoryIterator::hasChildren() follow symlinks test
+--FILE--
+<?php
+
+$dir = __DIR__ . DIRECTORY_SEPARATOR . 'symlinktest';
+
+if (!mkdir($dir)) {
+ die('Failed to create temporary directory for testing');
+} elseif (!symlink(__DIR__, $dir . DIRECTORY_SEPARATOR . 'symlink')) {
+ die('Failed to create symbolic link');
+}
+
+$it = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS | FilesystemIterator::FOLLOW_SYMLINKS | FilesystemIterator::KEY_AS_FILENAME);
+
+var_dump($it->key());
+var_dump($it->hasChildren());
+
+$it->setFlags(FilesystemIterator::SKIP_DOTS | FilesystemIterator::KEY_AS_FILENAME);
+
+var_dump($it->key());
+var_dump($it->hasChildren());
+
+?>
+--EXPECT--
+string(7) "symlink"
+bool(true)
+string(7) "symlink"
+bool(false)
+--CLEAN--
+<?php
+$dir = __DIR__ . DIRECTORY_SEPARATOR . 'symlinktest';
+unlink($dir . DIRECTORY_SEPARATOR . 'symlink');
+rmdir($dir);
+?>
--- /dev/null
+--TEST--
+Bug #80724 (FOLLOW_SYMLINKS interfering with FilesystemIterator key flags)
+--FILE--
+<?php
+$iterator = new FilesystemIterator(__DIR__, FilesystemIterator::KEY_AS_FILENAME);
+foreach ($iterator as $key => $value) {
+ echo var_dump(hasSeparator($key));
+ break;
+}
+$iterator->rewind();
+echo var_dump(hasSeparator($iterator->key()));
+
+$iterator->setFlags(0);
+echo var_dump(hasSeparator($iterator->key()));
+
+$iterator->setFlags(FilesystemIterator::KEY_AS_FILENAME);
+echo var_dump(hasSeparator($iterator->key()));
+
+$iterator2 = new FilesystemIterator(__DIR__, FilesystemIterator::FOLLOW_SYMLINKS | FilesystemIterator::KEY_AS_FILENAME);
+foreach ($iterator2 as $key => $value) {
+ echo var_dump(hasSeparator($key));
+ break;
+}
+$iterator2->rewind();
+echo var_dump(hasSeparator($iterator2->key()));
+
+$iterator2->setFlags(0);
+echo var_dump(hasSeparator($iterator2->key()));
+
+$iterator2->setFlags(FilesystemIterator::KEY_AS_FILENAME);
+echo var_dump(hasSeparator($iterator2->key()));
+
+function hasSeparator($key) {
+ return str_contains($key, __DIR__ . DIRECTORY_SEPARATOR);
+}
+
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
+bool(false)
00000010
00000100
00003000
-00003FF0
+00007FF0
000000F0
00000F00
-00003000
+00007000