From a449a8587b9f9b9430f483a1330f8f21de34dbab Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Wed, 31 Jul 2024 14:33:50 +0200 Subject: [PATCH] do not duplicate directory separators --- .../Iterator/RecursiveDirectoryIterator.php | 3 ++- .../RecursiveDirectoryIteratorTest.php | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php b/src/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php index 886dae588530b..a1225fceeb120 100644 --- a/src/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php +++ b/src/Symfony/Component/Finder/Iterator/RecursiveDirectoryIterator.php @@ -70,8 +70,9 @@ public function current() $subPathname .= $this->directorySeparator; } $subPathname .= $this->getFilename(); + $basePath = $this->rootPath; - if ('/' !== $basePath = $this->rootPath) { + if ('/' !== $basePath && !str_ends_with($basePath, $this->directorySeparator)) { $basePath .= $this->directorySeparator; } diff --git a/src/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php b/src/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php index 49144505f7883..353a919b13414 100644 --- a/src/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php +++ b/src/Symfony/Component/Finder/Tests/Iterator/RecursiveDirectoryIteratorTest.php @@ -55,4 +55,31 @@ public function testSeekOnFtp() $this->assertEquals($contains, $actual); } + + public function testTrailingDirectorySeparatorIsStripped() + { + $fixturesDirectory = __DIR__ . '/../Fixtures/'; + $actual = []; + + foreach (new RecursiveDirectoryIterator($fixturesDirectory, RecursiveDirectoryIterator::SKIP_DOTS) as $file) { + $actual[] = $file->getPathname(); + } + + sort($actual); + + $expected = [ + $fixturesDirectory.'.dot', + $fixturesDirectory.'A', + $fixturesDirectory.'copy', + $fixturesDirectory.'dolor.txt', + $fixturesDirectory.'gitignore', + $fixturesDirectory.'ipsum.txt', + $fixturesDirectory.'lorem.txt', + $fixturesDirectory.'one', + $fixturesDirectory.'r+e.gex[c]a(r)s', + $fixturesDirectory.'with space', + ]; + + $this->assertEquals($expected, $actual); + } }