Fix output file deletion after exception thrown on write (#328)

For relative paths, it would not work as the FileSystemHelper would not allow deleting a file that's not part of its base folder.
This commit is contained in:
Adrien Loison authored and GitHub committed 2016-10-12 11:15:07 -07:00
1 parent 23f8cc4f05
commit 77178122c3
5 files changed
+10 -21

No files matched your search

+6 -5
View File
@@ -13,15 +13,15 @@ use Box\Spout\Common\Exception\IOException;
*/
class FileSystemHelper
{
/** @var string Path of the base folder where all the I/O can occur */
protected $baseFolderPath;
/** @var string Real path of the base folder where all the I/O can occur */
protected $baseFolderRealPath;
/**
* @param string $baseFolderPath The path of the base folder where all the I/O can occur
*/
public function __construct($baseFolderPath)
{
$this->baseFolderPath = $baseFolderPath;
$this->baseFolderRealPath = realpath($baseFolderPath);
}
/**
@@ -124,9 +124,10 @@ class FileSystemHelper
*/
protected function throwIfOperationNotInBaseFolder($operationFolderPath)
{
$isInBaseFolder = (strpos($operationFolderPath, $this->baseFolderPath) === 0);
$operationFolderRealPath = realpath($operationFolderPath);
$isInBaseFolder = (strpos($operationFolderRealPath, $this->baseFolderRealPath) === 0);
if (!$isInBaseFolder) {
throw new IOException("Cannot perform I/O operation outside of the base folder: {$this->baseFolderPath}");
throw new IOException("Cannot perform I/O operation outside of the base folder: {$this->baseFolderRealPath}");
}
}
}