Commit 6fbb494
committed
feature symfony#26771 [Filesystem] Fix mirroring a directory with a relative path and a custom iterator (fxbt)
This PR was submitted for the 2.8 branch but it was squashed and merged into the 4.2-dev branch instead (closes symfony#26771).
Discussion
----------
[Filesystem] Fix mirroring a directory with a relative path and a custom iterator
| Q | A
| ------------- | ---
| Branch? | 2.8 up to 4.1
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
The Filesystem::mirror method with a Finder iterator doesn't work if the origin directory is relative.
This is a case where it won't work:
```
$dir = '/data/../data/';
$finder = (new Finder())->in($dir)->getIterator();
(new Filesystem())->mirror($dir, '/tmp', $finder);
```
The finder will return file objects like this :
```
SplFileInfo {
pathname: "/data/file.tmp"
...
}
```
But the following line will fail because because the `$file->getPathname()` and the `$originDir` are differents.
```
$target = $targetDir.substr($file->getPathname(), $originDirLen);
// $file->getPathname() = '/data/file.tmp'
// $originDirLen = strlen('/data/../data/') = 14
// $target = '/tmp' instead of '/tpm/file.tpm'
```
In some case, it's even worse. If the filename length is bigger than the `$originDirLen`, the target file will be a file with a completely wrong name:
```
// $file->getPathname() = '/data/file123456789.tmp'
// $originDirLen = strlen('/data/../data/') = 14
// $target = '/tmp/56789.tmp' instead of '/tpm/file123456789.tmp'
```
I fixed this on my side by using the realpath function everytime i'm calling the mirror method, but i doubt this is the desired behavior.
Commits
-------
27b673c [Filesystem] Fix mirroring a directory with a relative path and a custom iteratorFile tree
2 files changed
+44
-0
lines changed- src/Symfony/Component/Filesystem
- Tests
2 files changed
+44
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
572 | 572 | | |
573 | 573 | | |
574 | 574 | | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
575 | 579 | | |
576 | 580 | | |
577 | 581 | | |
| |||
Lines changed: 40 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1332 | 1332 | | |
1333 | 1333 | | |
1334 | 1334 | | |
| 1335 | + | |
| 1336 | + | |
| 1337 | + | |
| 1338 | + | |
| 1339 | + | |
| 1340 | + | |
| 1341 | + | |
| 1342 | + | |
| 1343 | + | |
| 1344 | + | |
| 1345 | + | |
| 1346 | + | |
| 1347 | + | |
| 1348 | + | |
| 1349 | + | |
| 1350 | + | |
| 1351 | + | |
| 1352 | + | |
| 1353 | + | |
| 1354 | + | |
| 1355 | + | |
| 1356 | + | |
| 1357 | + | |
| 1358 | + | |
| 1359 | + | |
| 1360 | + | |
| 1361 | + | |
| 1362 | + | |
| 1363 | + | |
| 1364 | + | |
| 1365 | + | |
| 1366 | + | |
| 1367 | + | |
| 1368 | + | |
| 1369 | + | |
| 1370 | + | |
| 1371 | + | |
| 1372 | + | |
| 1373 | + | |
| 1374 | + | |
1335 | 1375 | | |
1336 | 1376 | | |
1337 | 1377 | | |
| |||
0 commit comments