Currently when you use RecursiveDirectoryIterator with the
CURRENT_AS_PATHNAME flag PHP will throw an UnexpectedValueException with
message 'Objects returned by RecursiveIterator::getChildren() must implement
RecursiveIterator'.This happend because getChildren() will return the
current directory name instead of an Iterator (or subclass of) as required
by the RecursiveIterator interface.
This commit changes getChildren() to return annother
RecursiveDirectoryIterator but current() still returns the path name when
CURRENT_AS_PATHNAME is used. A PHPT test case (bug66405.phpt) that
reproduces the bug is included.
This fix was originally against the PHP-5.4 branch, but it was not merged
before 5.4 reached EOL. I am hoping to get it applied to 5.5, 5.6, and
master.
Three issues are addressed:
- RecursiveRegexIterator::accept() should accept non-empty arrays without
applying any regular expression and RegexIterator::accept() should not accept
an array.
- RegexIterator::accept() should not accept an atom that fails to match
anything, even when PREG_PATTERN_ORDER is used (which would return an array
of empty arrays).
- RecursiveRegexIterator::getChildren() should pass all constructor arguments
to its child iterator instead of just the regular expression.
While running these on HHVM I've run into a lot of parallelism issues.
I'm backporting all the fixes I had to do in
https://github.com/facebook/hiphop-php/blob/master/hphp/tools/import_zend_test.py#L650
to php core.
Most of these changes were just filenames that were shared between
tests, but I did more surgery on the fixed ports. I can apreciate port
31337 as much as the next nerd, but random ports are better for tests.
* pull-request/320:
this is test 5 not 6
fix race condition
more shared names that create race conditions
change to a unique filename
more shared filenames
yet another shared filename
don't share a filename to stop race conditions
fix race condition for 2-4 and normalize names for others
fix race condition when running tests in parallel
clean up after test
Fix#64572: Clean up after the test
Fix#64572: Clean up after the test
* pull-request/320:
this is test 5 not 6
fix race condition
more shared names that create race conditions
change to a unique filename
more shared filenames
yet another shared filename
don't share a filename to stop race conditions
fix race condition for 2-4 and normalize names for others
fix race condition when running tests in parallel
clean up after test
Fix#64572: Clean up after the test
Fix#64572: Clean up after the test