Fix infinite loop for CSV with all lines empty
Only occured with multiline CSV files
This commit is contained in:
parent
16d0290a17
commit
a1a1077677
@ -111,11 +111,14 @@ class RowIterator implements IteratorInterface
|
||||
*/
|
||||
public function next()
|
||||
{
|
||||
$lineData = false;
|
||||
$this->hasReachedEndOfFile = $this->globalFunctionsHelper->feof($this->filePointer);
|
||||
|
||||
if (!$this->hasReachedEndOfFile) {
|
||||
if ($this->hasReachedEndOfFile) {
|
||||
return;
|
||||
}
|
||||
|
||||
do {
|
||||
$lineData = false;
|
||||
$utf8EncodedLineData = $this->getNextUTF8EncodedLine();
|
||||
if ($utf8EncodedLineData !== false) {
|
||||
$lineData = $this->globalFunctionsHelper->str_getcsv($utf8EncodedLineData, $this->fieldDelimiter, $this->fieldEnclosure);
|
||||
@ -132,7 +135,6 @@ class RowIterator implements IteratorInterface
|
||||
$this->hasReachedEndOfFile = $hasNowReachedEndOfFile;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next line, converted if necessary to UTF-8.
|
||||
|
@ -142,6 +142,29 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals($expectedRows, $allRows);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function dataProviderForTestReadShouldReadEmptyFile()
|
||||
{
|
||||
return [
|
||||
['csv_empty.csv'],
|
||||
['csv_all_lines_empty.csv'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider dataProviderForTestReadShouldReadEmptyFile
|
||||
*
|
||||
* @param string $fileName
|
||||
* @return void
|
||||
*/
|
||||
public function testReadShouldReadEmptyFile($fileName)
|
||||
{
|
||||
$allRows = $this->getAllRowsForFile($fileName);
|
||||
$this->assertEquals([], $allRows);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
|
@ -3,3 +3,6 @@ require_once(dirname(__DIR__) . '/vendor/autoload.php');
|
||||
|
||||
require_once(dirname(__DIR__) . '/tests/Spout/TestUsingResource.php');
|
||||
require_once(dirname(__DIR__) . '/tests/Spout/ReflectionHelper.php');
|
||||
|
||||
// Make sure a timezone is set to be able to work with dates
|
||||
date_default_timezone_set('UTC');
|
||||
|
2
tests/resources/csv/csv_all_lines_empty.csv
Normal file
2
tests/resources/csv/csv_all_lines_empty.csv
Normal file
@ -0,0 +1,2 @@
|
||||
|
||||
|
|
0
tests/resources/csv/csv_empty.csv
Normal file
0
tests/resources/csv/csv_empty.csv
Normal file
|
Loading…
x
Reference in New Issue
Block a user