From c0de8c0be0e8759698fabae61f81b4aad809714e Mon Sep 17 00:00:00 2001 From: bayzhanov Date: Tue, 4 Sep 2018 13:55:34 +0300 Subject: [PATCH 1/6] xls file cause the exception during open by Xls reader #402 ignore some exception in property stream --- src/PhpSpreadsheet/Shared/OLERead.php | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/PhpSpreadsheet/Shared/OLERead.php b/src/PhpSpreadsheet/Shared/OLERead.php index 5755411700..87791877fd 100644 --- a/src/PhpSpreadsheet/Shared/OLERead.php +++ b/src/PhpSpreadsheet/Shared/OLERead.php @@ -276,11 +276,16 @@ private function readPropertySets() // type of entry $type = ord($d[self::TYPE_POS]); - // sectorID of first sector or short sector, if this entry refers to a stream (the case with workbook) - // sectorID of first sector of the short-stream container stream, if this entry is root entry - $startBlock = self::getInt4d($d, self::START_BLOCK_POS); - - $size = self::getInt4d($d, self::SIZE_POS); + try { + // sectorID of first sector or short sector, if this entry refers to a stream (the case with workbook) + // sectorID of first sector of the short-stream container stream, if this entry is root entry + $startBlock = self::getInt4d($d, self::START_BLOCK_POS); + + $size = self::getInt4d($d, self::SIZE_POS); + } catch (ReaderException $e) { + // skip invalid parameters, break loop + break; + } $name = str_replace("\x00", '', substr($d, 0, $nameSize)); From b349ea3836d60f97c6cc5ce89e98184d2d7b9b42 Mon Sep 17 00:00:00 2001 From: bayzhanov Date: Thu, 6 Sep 2018 16:09:18 +0300 Subject: [PATCH 2/6] "!" characters in Worksheet title will make reference formulas crash #325 Bugfix: replace explode by "!" with special function, that extracts sheet name from reference --- .../Calculation/Calculation.php | 19 +++++++------------ src/PhpSpreadsheet/Calculation/LookupRef.php | 15 ++++++--------- src/PhpSpreadsheet/Cell/Coordinate.php | 13 +++---------- src/PhpSpreadsheet/Chart/DataSeriesValues.php | 6 +----- src/PhpSpreadsheet/Reader/Gnumeric.php | 3 ++- src/PhpSpreadsheet/Reader/Xls.php | 11 +++++------ src/PhpSpreadsheet/Reader/Xlsx.php | 10 ++++------ src/PhpSpreadsheet/Worksheet/AutoFilter.php | 7 ++----- src/PhpSpreadsheet/Worksheet/Worksheet.php | 6 +++--- src/PhpSpreadsheet/Writer/Xls/Parser.php | 5 +++-- src/PhpSpreadsheet/Writer/Xlsx/Workbook.php | 4 +--- src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php | 4 +--- tests/data/CellAbsoluteCoordinate.php | 8 ++++---- tests/data/CellAbsoluteReference.php | 8 ++++---- 14 files changed, 46 insertions(+), 73 deletions(-) diff --git a/src/PhpSpreadsheet/Calculation/Calculation.php b/src/PhpSpreadsheet/Calculation/Calculation.php index 79b98b95b3..5dc74ef075 100644 --- a/src/PhpSpreadsheet/Calculation/Calculation.php +++ b/src/PhpSpreadsheet/Calculation/Calculation.php @@ -3478,19 +3478,15 @@ private function _parseFormula($formula, Cell $pCell = null) $testPrevOp = $stack->last(1); if ($testPrevOp['value'] == ':') { $startRowColRef = $output[count($output) - 1]['value']; - $rangeWS1 = ''; - if (strpos('!', $startRowColRef) !== false) { - list($rangeWS1, $startRowColRef) = explode('!', $startRowColRef); - } + list($rangeWS1, $startRowColRef) = Worksheet::extractSheetTitle($startRowColRef, true); if ($rangeWS1 != '') { $rangeWS1 .= '!'; } - $rangeWS2 = $rangeWS1; - if (strpos('!', $val) !== false) { - list($rangeWS2, $val) = explode('!', $val); - } + list($rangeWS2, $val) = Worksheet::extractSheetTitle($val, true); if ($rangeWS2 != '') { $rangeWS2 .= '!'; + } else { + $rangeWS2 = $rangeWS1; } if ((is_int($startRowColRef)) && (ctype_digit($val)) && ($startRowColRef <= 1048576) && ($val <= 1048576)) { @@ -3665,13 +3661,12 @@ private function processTokenStack($tokens, $cellID = null, Cell $pCell = null) case ':': // Range $sheet1 = $sheet2 = ''; if (strpos($operand1Data['reference'], '!') !== false) { - list($sheet1, $operand1Data['reference']) = explode('!', $operand1Data['reference']); + list($sheet1, $operand1Data['reference']) = Worksheet::extractSheetTitle($operand1Data['reference'], true); } else { $sheet1 = ($pCellParent !== null) ? $pCellWorksheet->getTitle() : ''; } - if (strpos($operand2Data['reference'], '!') !== false) { - list($sheet2, $operand2Data['reference']) = explode('!', $operand2Data['reference']); - } else { + list($sheet2, $operand2Data['reference']) = Worksheet::extractSheetTitle($operand2Data['reference'], true); + if (empty($sheet2)) { $sheet2 = $sheet1; } if ($sheet1 == $sheet2) { diff --git a/src/PhpSpreadsheet/Calculation/LookupRef.php b/src/PhpSpreadsheet/Calculation/LookupRef.php index 71550a7b57..8bd778d9da 100644 --- a/src/PhpSpreadsheet/Calculation/LookupRef.php +++ b/src/PhpSpreadsheet/Calculation/LookupRef.php @@ -4,6 +4,7 @@ use PhpOffice\PhpSpreadsheet\Cell\Cell; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; +use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; class LookupRef { @@ -96,9 +97,7 @@ public static function COLUMN($cellAddress = null) return (int) Coordinate::columnIndexFromString($columnKey); } } else { - if (strpos($cellAddress, '!') !== false) { - list($sheet, $cellAddress) = explode('!', $cellAddress); - } + list($sheet, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); if (strpos($cellAddress, ':') !== false) { list($startAddress, $endAddress) = explode(':', $cellAddress); $startAddress = preg_replace('/[^a-z]/i', '', $startAddress); @@ -175,9 +174,7 @@ public static function ROW($cellAddress = null) } } } else { - if (strpos($cellAddress, '!') !== false) { - list($sheet, $cellAddress) = explode('!', $cellAddress); - } + list($sheet, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); if (strpos($cellAddress, ':') !== false) { list($startAddress, $endAddress) = explode(':', $cellAddress); $startAddress = preg_replace('/\D/', '', $startAddress); @@ -297,7 +294,7 @@ public static function INDIRECT($cellAddress = null, Cell $pCell = null) } if (strpos($cellAddress, '!') !== false) { - list($sheetName, $cellAddress) = explode('!', $cellAddress); + list($sheetName, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); $sheetName = trim($sheetName, "'"); $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); } else { @@ -308,7 +305,7 @@ public static function INDIRECT($cellAddress = null, Cell $pCell = null) } if (strpos($cellAddress, '!') !== false) { - list($sheetName, $cellAddress) = explode('!', $cellAddress); + list($sheetName, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); $sheetName = trim($sheetName, "'"); $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); } else { @@ -361,7 +358,7 @@ public static function OFFSET($cellAddress = null, $rows = 0, $columns = 0, $hei $sheetName = null; if (strpos($cellAddress, '!')) { - list($sheetName, $cellAddress) = explode('!', $cellAddress); + list($sheetName, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); $sheetName = trim($sheetName, "'"); } if (strpos($cellAddress, ':')) { diff --git a/src/PhpSpreadsheet/Cell/Coordinate.php b/src/PhpSpreadsheet/Cell/Coordinate.php index 366ec492ce..1bca6f4499 100644 --- a/src/PhpSpreadsheet/Cell/Coordinate.php +++ b/src/PhpSpreadsheet/Cell/Coordinate.php @@ -3,6 +3,7 @@ namespace PhpOffice\PhpSpreadsheet\Cell; use PhpOffice\PhpSpreadsheet\Exception; +use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; /** * Helper class to manipulate cell coordinates. @@ -70,11 +71,7 @@ public static function absoluteReference($pCoordinateString) } // Split out any worksheet name from the reference - $worksheet = ''; - $cellAddress = explode('!', $pCoordinateString); - if (count($cellAddress) > 1) { - list($worksheet, $pCoordinateString) = $cellAddress; - } + list($worksheet, $pCoordinateString) = Worksheet::extractSheetTitle($pCoordinateString, true); if ($worksheet > '') { $worksheet .= '!'; } @@ -105,11 +102,7 @@ public static function absoluteCoordinate($pCoordinateString) } // Split out any worksheet name from the coordinate - $worksheet = ''; - $cellAddress = explode('!', $pCoordinateString); - if (count($cellAddress) > 1) { - list($worksheet, $pCoordinateString) = $cellAddress; - } + list($worksheet, $pCoordinateString) = Worksheet::extractSheetTitle($pCoordinateString, true); if ($worksheet > '') { $worksheet .= '!'; } diff --git a/src/PhpSpreadsheet/Chart/DataSeriesValues.php b/src/PhpSpreadsheet/Chart/DataSeriesValues.php index a726219ce4..fda6ccdfd6 100644 --- a/src/PhpSpreadsheet/Chart/DataSeriesValues.php +++ b/src/PhpSpreadsheet/Chart/DataSeriesValues.php @@ -354,11 +354,7 @@ public function refresh(Worksheet $worksheet, $flatten = true) } unset($dataValue); } else { - $cellRange = explode('!', $this->dataSource); - if (count($cellRange) > 1) { - list(, $cellRange) = $cellRange; - } - + list($worksheet, $cellRange) = Worksheet::extractSheetTitle($this->dataSource, true); $dimensions = Coordinate::rangeDimension(str_replace('$', '', $cellRange)); if (($dimensions[0] == 1) || ($dimensions[1] == 1)) { $this->dataValues = Functions::flattenArray($newDataValues); diff --git a/src/PhpSpreadsheet/Reader/Gnumeric.php b/src/PhpSpreadsheet/Reader/Gnumeric.php index af2ed8e46f..dd92f15341 100644 --- a/src/PhpSpreadsheet/Reader/Gnumeric.php +++ b/src/PhpSpreadsheet/Reader/Gnumeric.php @@ -16,6 +16,7 @@ use PhpOffice\PhpSpreadsheet\Style\Borders; use PhpOffice\PhpSpreadsheet\Style\Fill; use PhpOffice\PhpSpreadsheet\Style\Font; +use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use XMLReader; class Gnumeric extends BaseReader @@ -784,7 +785,7 @@ public function loadIntoExisting($pFilename, Spreadsheet $spreadsheet) continue; } - $range = explode('!', $range); + $range = Worksheet::extractSheetTitle($range, true); $range[0] = trim($range[0], "'"); if ($worksheet = $spreadsheet->getSheetByName($range[0])) { $extractedRange = str_replace('$', '', $range[1]); diff --git a/src/PhpSpreadsheet/Reader/Xls.php b/src/PhpSpreadsheet/Reader/Xls.php index 3416c358fd..b275e4c193 100644 --- a/src/PhpSpreadsheet/Reader/Xls.php +++ b/src/PhpSpreadsheet/Reader/Xls.php @@ -1213,7 +1213,7 @@ public function load($pFilename) // $range should look like one of these // Foo!$C$7:$J$66 // Bar!$A$1:$IV$2 - $explodes = explode('!', $range); // FIXME: what if sheetname contains exclamation mark? + $explodes = Worksheet::extractSheetTitle($range, true); $sheetName = trim($explodes[0], "'"); if (count($explodes) == 2) { if (strpos($explodes[1], ':') === false) { @@ -1243,8 +1243,8 @@ public function load($pFilename) // $range should look like this one of these // Sheet!$A$1:$B$65536 // Sheet!$A$1:$IV$2 - $explodes = explode('!', $range); - if (count($explodes) == 2) { + if (strpos($range, '!') !== false) { + $explodes = Worksheet::extractSheetTitle($range, true); if ($docSheet = $this->spreadsheet->getSheetByName($explodes[0])) { $extractedRange = $explodes[1]; $extractedRange = str_replace('$', '', $extractedRange); @@ -1270,9 +1270,8 @@ public function load($pFilename) } } else { // Extract range - $explodes = explode('!', $definedName['formula']); - - if (count($explodes) == 2) { + if (strpos($definedName['formula'], '!') !== false) { + $explodes = Worksheet::extractSheetTitle($definedName['formula'], true); if (($docSheet = $this->spreadsheet->getSheetByName($explodes[0])) || ($docSheet = $this->spreadsheet->getSheetByName(trim($explodes[0], "'")))) { $extractedRange = $explodes[1]; diff --git a/src/PhpSpreadsheet/Reader/Xlsx.php b/src/PhpSpreadsheet/Reader/Xlsx.php index a77098527b..dfb4b8253c 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx.php +++ b/src/PhpSpreadsheet/Reader/Xlsx.php @@ -1833,8 +1833,7 @@ public function load($pFilename) $rangeSets = preg_split("/'(.*?)'(?:![A-Z0-9]+:[A-Z0-9]+,?)/", $extractedRange, PREG_SPLIT_NO_EMPTY); $newRangeSets = []; foreach ($rangeSets as $rangeSet) { - $range = explode('!', $rangeSet); // FIXME: what if sheetname contains exclamation mark? - $rangeSet = isset($range[1]) ? $range[1] : $range[0]; + list($sheetName, $rangeSet) = Worksheet::extractSheetTitle($rangeSet, true); if (strpos($rangeSet, ':') === false) { $rangeSet = $rangeSet . ':' . $rangeSet; } @@ -1881,8 +1880,8 @@ public function load($pFilename) break; default: if ($mapSheetId[(int) $definedName['localSheetId']] !== null) { - $range = explode('!', (string) $definedName); - if (count($range) == 2) { + if (strpos((string) $definedName, '!') !== false) { + $range = Worksheet::extractSheetTitle((string) $definedName, true); $range[0] = str_replace("''", "'", $range[0]); $range[0] = str_replace("'", '', $range[0]); if ($worksheet = $docSheet->getParent()->getSheetByName($range[0])) { @@ -1908,8 +1907,7 @@ public function load($pFilename) $locatedSheet = $excel->getSheetByName($extractedSheetName); // Modify range - $range = explode('!', $extractedRange); - $extractedRange = isset($range[1]) ? $range[1] : $range[0]; + list($worksheetName, $extractedRange) = Worksheet::extractSheetTitle($extractedRange, true); } if ($locatedSheet !== null) { diff --git a/src/PhpSpreadsheet/Worksheet/AutoFilter.php b/src/PhpSpreadsheet/Worksheet/AutoFilter.php index b92c986e6c..333aa1b811 100644 --- a/src/PhpSpreadsheet/Worksheet/AutoFilter.php +++ b/src/PhpSpreadsheet/Worksheet/AutoFilter.php @@ -89,11 +89,8 @@ public function getRange() */ public function setRange($pRange) { - // Uppercase coordinate - $cellAddress = explode('!', strtoupper($pRange)); - if (count($cellAddress) > 1) { - list($worksheet, $pRange) = $cellAddress; - } + // extract coordinate + list($worksheet, $pRange) = Worksheet::extractSheetTitle($pRange, true); if (strpos($pRange, ':') !== false) { $this->range = $pRange; diff --git a/src/PhpSpreadsheet/Worksheet/Worksheet.php b/src/PhpSpreadsheet/Worksheet/Worksheet.php index 42dcd69b02..f4ee4b60a8 100644 --- a/src/PhpSpreadsheet/Worksheet/Worksheet.php +++ b/src/PhpSpreadsheet/Worksheet/Worksheet.php @@ -2729,12 +2729,12 @@ public function getHashCode() public static function extractSheetTitle($pRange, $returnRange = false) { // Sheet title included? - if (($sep = strpos($pRange, '!')) === false) { - return ''; + if (($sep = strrpos($pRange, '!')) === false) { + return $returnRange ? ['', $pRange] : ''; } if ($returnRange) { - return [trim(substr($pRange, 0, $sep), "'"), substr($pRange, $sep + 1)]; + return [substr($pRange, 0, $sep), substr($pRange, $sep + 1)]; } return substr($pRange, $sep + 1); diff --git a/src/PhpSpreadsheet/Writer/Xls/Parser.php b/src/PhpSpreadsheet/Writer/Xls/Parser.php index 00ead3c233..e87d09a223 100644 --- a/src/PhpSpreadsheet/Writer/Xls/Parser.php +++ b/src/PhpSpreadsheet/Writer/Xls/Parser.php @@ -3,6 +3,7 @@ namespace PhpOffice\PhpSpreadsheet\Writer\Xls; use PhpOffice\PhpSpreadsheet\Shared\StringHelper; +use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet as PhpspreadsheetWorksheet; use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException; // Original file header of PEAR::Spreadsheet_Excel_Writer_Parser (used as the base for this class): @@ -643,7 +644,7 @@ private function convertRange2d($range, $class = 0) private function convertRange3d($token) { // Split the ref at the ! symbol - list($ext_ref, $range) = explode('!', $token); + list($ext_ref, $range) = PhpspreadsheetWorksheet::extractSheetTitle($token, true); // Convert the external reference part (different for BIFF8) $ext_ref = $this->getRefIndex($ext_ref); @@ -695,7 +696,7 @@ private function convertRef2d($cell) private function convertRef3d($cell) { // Split the ref at the ! symbol - list($ext_ref, $cell) = explode('!', $cell); + list($ext_ref, $cell) = PhpspreadsheetWorksheet::extractSheetTitle($cell, true); // Convert the external reference part (different for BIFF8) $ext_ref = $this->getRefIndex($ext_ref); diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php b/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php index 43a1916f5b..e3ddb03c14 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php @@ -339,9 +339,7 @@ private function writeDefinedNameForAutofilter(XMLWriter $objWriter, Worksheet $ $range = Coordinate::splitRange($autoFilterRange); $range = $range[0]; // Strip any worksheet ref so we can make the cell ref absolute - if (strpos($range[0], '!') !== false) { - list($ws, $range[0]) = explode('!', $range[0]); - } + list($ws, $range[0]) = Worksheet::extractSheetTitle($range[0], true); $range[0] = Coordinate::absoluteCoordinate($range[0]); $range[1] = Coordinate::absoluteCoordinate($range[1]); diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php b/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php index cb46a12106..78a62e9eca 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php @@ -748,9 +748,7 @@ private function writeAutoFilter(XMLWriter $objWriter, PhpspreadsheetWorksheet $ $range = Coordinate::splitRange($autoFilterRange); $range = $range[0]; // Strip any worksheet ref - if (strpos($range[0], '!') !== false) { - list($ws, $range[0]) = explode('!', $range[0]); - } + list($ws, $range[0]) = PhpspreadsheetWorksheet::extractSheetTitle($range[0], true); $range = implode(':', $range); $objWriter->writeAttribute('ref', str_replace('$', '', $range)); diff --git a/tests/data/CellAbsoluteCoordinate.php b/tests/data/CellAbsoluteCoordinate.php index d5eefca1e1..86487585c2 100644 --- a/tests/data/CellAbsoluteCoordinate.php +++ b/tests/data/CellAbsoluteCoordinate.php @@ -42,11 +42,11 @@ '\'Worksheet1\'!$AI256', ], [ - '\'Worksheet1\'!$AI$256', - '\'Worksheet1\'!AI$256', + '\'Work!sheet1!\'!$AI$256', + '\'Work!sheet1!\'!AI$256', ], [ - '\'Worksheet1\'!$AI$256', - '\'Worksheet1\'!$AI$256', + '\'Work!sheet1!\'!$AI$256', + '\'Work!sheet1!\'!$AI$256', ], ]; diff --git a/tests/data/CellAbsoluteReference.php b/tests/data/CellAbsoluteReference.php index ccf4f33f4b..71dac54547 100644 --- a/tests/data/CellAbsoluteReference.php +++ b/tests/data/CellAbsoluteReference.php @@ -26,12 +26,12 @@ 'AI2012', ], [ - '\'Worksheet1\'!$AI$256', - '\'Worksheet1\'!AI256', + '\'Work!sheet1\'!$AI$256', + '\'Work!sheet1\'!AI256', ], [ - 'Worksheet1!$AI$256', - 'Worksheet1!AI256', + 'Work!sheet1!$AI$256', + 'Work!sheet1!AI256', ], [ '\'Data Worksheet\'!$AI$256', From d77841be2541d38ac61fdf53dddb0fdd174ec3d2 Mon Sep 17 00:00:00 2001 From: bayzhanov Date: Thu, 6 Sep 2018 16:21:21 +0300 Subject: [PATCH 3/6] Revert ""!" characters in Worksheet title will make reference formulas crash #325 Bugfix: replace explode by "!" with special function, that extracts sheet name from reference" This reverts commit b349ea3 --- .../Calculation/Calculation.php | 19 ++++++++++++------- src/PhpSpreadsheet/Calculation/LookupRef.php | 15 +++++++++------ src/PhpSpreadsheet/Cell/Coordinate.php | 13 ++++++++++--- src/PhpSpreadsheet/Chart/DataSeriesValues.php | 6 +++++- src/PhpSpreadsheet/Reader/Gnumeric.php | 3 +-- src/PhpSpreadsheet/Reader/Xls.php | 11 ++++++----- src/PhpSpreadsheet/Reader/Xlsx.php | 10 ++++++---- src/PhpSpreadsheet/Worksheet/AutoFilter.php | 7 +++++-- src/PhpSpreadsheet/Worksheet/Worksheet.php | 6 +++--- src/PhpSpreadsheet/Writer/Xls/Parser.php | 5 ++--- src/PhpSpreadsheet/Writer/Xlsx/Workbook.php | 4 +++- src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php | 4 +++- tests/data/CellAbsoluteCoordinate.php | 8 ++++---- tests/data/CellAbsoluteReference.php | 8 ++++---- 14 files changed, 73 insertions(+), 46 deletions(-) diff --git a/src/PhpSpreadsheet/Calculation/Calculation.php b/src/PhpSpreadsheet/Calculation/Calculation.php index 5dc74ef075..79b98b95b3 100644 --- a/src/PhpSpreadsheet/Calculation/Calculation.php +++ b/src/PhpSpreadsheet/Calculation/Calculation.php @@ -3478,15 +3478,19 @@ private function _parseFormula($formula, Cell $pCell = null) $testPrevOp = $stack->last(1); if ($testPrevOp['value'] == ':') { $startRowColRef = $output[count($output) - 1]['value']; - list($rangeWS1, $startRowColRef) = Worksheet::extractSheetTitle($startRowColRef, true); + $rangeWS1 = ''; + if (strpos('!', $startRowColRef) !== false) { + list($rangeWS1, $startRowColRef) = explode('!', $startRowColRef); + } if ($rangeWS1 != '') { $rangeWS1 .= '!'; } - list($rangeWS2, $val) = Worksheet::extractSheetTitle($val, true); + $rangeWS2 = $rangeWS1; + if (strpos('!', $val) !== false) { + list($rangeWS2, $val) = explode('!', $val); + } if ($rangeWS2 != '') { $rangeWS2 .= '!'; - } else { - $rangeWS2 = $rangeWS1; } if ((is_int($startRowColRef)) && (ctype_digit($val)) && ($startRowColRef <= 1048576) && ($val <= 1048576)) { @@ -3661,12 +3665,13 @@ private function processTokenStack($tokens, $cellID = null, Cell $pCell = null) case ':': // Range $sheet1 = $sheet2 = ''; if (strpos($operand1Data['reference'], '!') !== false) { - list($sheet1, $operand1Data['reference']) = Worksheet::extractSheetTitle($operand1Data['reference'], true); + list($sheet1, $operand1Data['reference']) = explode('!', $operand1Data['reference']); } else { $sheet1 = ($pCellParent !== null) ? $pCellWorksheet->getTitle() : ''; } - list($sheet2, $operand2Data['reference']) = Worksheet::extractSheetTitle($operand2Data['reference'], true); - if (empty($sheet2)) { + if (strpos($operand2Data['reference'], '!') !== false) { + list($sheet2, $operand2Data['reference']) = explode('!', $operand2Data['reference']); + } else { $sheet2 = $sheet1; } if ($sheet1 == $sheet2) { diff --git a/src/PhpSpreadsheet/Calculation/LookupRef.php b/src/PhpSpreadsheet/Calculation/LookupRef.php index 8bd778d9da..71550a7b57 100644 --- a/src/PhpSpreadsheet/Calculation/LookupRef.php +++ b/src/PhpSpreadsheet/Calculation/LookupRef.php @@ -4,7 +4,6 @@ use PhpOffice\PhpSpreadsheet\Cell\Cell; use PhpOffice\PhpSpreadsheet\Cell\Coordinate; -use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; class LookupRef { @@ -97,7 +96,9 @@ public static function COLUMN($cellAddress = null) return (int) Coordinate::columnIndexFromString($columnKey); } } else { - list($sheet, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); + if (strpos($cellAddress, '!') !== false) { + list($sheet, $cellAddress) = explode('!', $cellAddress); + } if (strpos($cellAddress, ':') !== false) { list($startAddress, $endAddress) = explode(':', $cellAddress); $startAddress = preg_replace('/[^a-z]/i', '', $startAddress); @@ -174,7 +175,9 @@ public static function ROW($cellAddress = null) } } } else { - list($sheet, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); + if (strpos($cellAddress, '!') !== false) { + list($sheet, $cellAddress) = explode('!', $cellAddress); + } if (strpos($cellAddress, ':') !== false) { list($startAddress, $endAddress) = explode(':', $cellAddress); $startAddress = preg_replace('/\D/', '', $startAddress); @@ -294,7 +297,7 @@ public static function INDIRECT($cellAddress = null, Cell $pCell = null) } if (strpos($cellAddress, '!') !== false) { - list($sheetName, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); + list($sheetName, $cellAddress) = explode('!', $cellAddress); $sheetName = trim($sheetName, "'"); $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); } else { @@ -305,7 +308,7 @@ public static function INDIRECT($cellAddress = null, Cell $pCell = null) } if (strpos($cellAddress, '!') !== false) { - list($sheetName, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); + list($sheetName, $cellAddress) = explode('!', $cellAddress); $sheetName = trim($sheetName, "'"); $pSheet = $pCell->getWorksheet()->getParent()->getSheetByName($sheetName); } else { @@ -358,7 +361,7 @@ public static function OFFSET($cellAddress = null, $rows = 0, $columns = 0, $hei $sheetName = null; if (strpos($cellAddress, '!')) { - list($sheetName, $cellAddress) = Worksheet::extractSheetTitle($cellAddress, true); + list($sheetName, $cellAddress) = explode('!', $cellAddress); $sheetName = trim($sheetName, "'"); } if (strpos($cellAddress, ':')) { diff --git a/src/PhpSpreadsheet/Cell/Coordinate.php b/src/PhpSpreadsheet/Cell/Coordinate.php index 1bca6f4499..366ec492ce 100644 --- a/src/PhpSpreadsheet/Cell/Coordinate.php +++ b/src/PhpSpreadsheet/Cell/Coordinate.php @@ -3,7 +3,6 @@ namespace PhpOffice\PhpSpreadsheet\Cell; use PhpOffice\PhpSpreadsheet\Exception; -use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; /** * Helper class to manipulate cell coordinates. @@ -71,7 +70,11 @@ public static function absoluteReference($pCoordinateString) } // Split out any worksheet name from the reference - list($worksheet, $pCoordinateString) = Worksheet::extractSheetTitle($pCoordinateString, true); + $worksheet = ''; + $cellAddress = explode('!', $pCoordinateString); + if (count($cellAddress) > 1) { + list($worksheet, $pCoordinateString) = $cellAddress; + } if ($worksheet > '') { $worksheet .= '!'; } @@ -102,7 +105,11 @@ public static function absoluteCoordinate($pCoordinateString) } // Split out any worksheet name from the coordinate - list($worksheet, $pCoordinateString) = Worksheet::extractSheetTitle($pCoordinateString, true); + $worksheet = ''; + $cellAddress = explode('!', $pCoordinateString); + if (count($cellAddress) > 1) { + list($worksheet, $pCoordinateString) = $cellAddress; + } if ($worksheet > '') { $worksheet .= '!'; } diff --git a/src/PhpSpreadsheet/Chart/DataSeriesValues.php b/src/PhpSpreadsheet/Chart/DataSeriesValues.php index fda6ccdfd6..a726219ce4 100644 --- a/src/PhpSpreadsheet/Chart/DataSeriesValues.php +++ b/src/PhpSpreadsheet/Chart/DataSeriesValues.php @@ -354,7 +354,11 @@ public function refresh(Worksheet $worksheet, $flatten = true) } unset($dataValue); } else { - list($worksheet, $cellRange) = Worksheet::extractSheetTitle($this->dataSource, true); + $cellRange = explode('!', $this->dataSource); + if (count($cellRange) > 1) { + list(, $cellRange) = $cellRange; + } + $dimensions = Coordinate::rangeDimension(str_replace('$', '', $cellRange)); if (($dimensions[0] == 1) || ($dimensions[1] == 1)) { $this->dataValues = Functions::flattenArray($newDataValues); diff --git a/src/PhpSpreadsheet/Reader/Gnumeric.php b/src/PhpSpreadsheet/Reader/Gnumeric.php index dd92f15341..af2ed8e46f 100644 --- a/src/PhpSpreadsheet/Reader/Gnumeric.php +++ b/src/PhpSpreadsheet/Reader/Gnumeric.php @@ -16,7 +16,6 @@ use PhpOffice\PhpSpreadsheet\Style\Borders; use PhpOffice\PhpSpreadsheet\Style\Fill; use PhpOffice\PhpSpreadsheet\Style\Font; -use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet; use XMLReader; class Gnumeric extends BaseReader @@ -785,7 +784,7 @@ public function loadIntoExisting($pFilename, Spreadsheet $spreadsheet) continue; } - $range = Worksheet::extractSheetTitle($range, true); + $range = explode('!', $range); $range[0] = trim($range[0], "'"); if ($worksheet = $spreadsheet->getSheetByName($range[0])) { $extractedRange = str_replace('$', '', $range[1]); diff --git a/src/PhpSpreadsheet/Reader/Xls.php b/src/PhpSpreadsheet/Reader/Xls.php index b275e4c193..3416c358fd 100644 --- a/src/PhpSpreadsheet/Reader/Xls.php +++ b/src/PhpSpreadsheet/Reader/Xls.php @@ -1213,7 +1213,7 @@ public function load($pFilename) // $range should look like one of these // Foo!$C$7:$J$66 // Bar!$A$1:$IV$2 - $explodes = Worksheet::extractSheetTitle($range, true); + $explodes = explode('!', $range); // FIXME: what if sheetname contains exclamation mark? $sheetName = trim($explodes[0], "'"); if (count($explodes) == 2) { if (strpos($explodes[1], ':') === false) { @@ -1243,8 +1243,8 @@ public function load($pFilename) // $range should look like this one of these // Sheet!$A$1:$B$65536 // Sheet!$A$1:$IV$2 - if (strpos($range, '!') !== false) { - $explodes = Worksheet::extractSheetTitle($range, true); + $explodes = explode('!', $range); + if (count($explodes) == 2) { if ($docSheet = $this->spreadsheet->getSheetByName($explodes[0])) { $extractedRange = $explodes[1]; $extractedRange = str_replace('$', '', $extractedRange); @@ -1270,8 +1270,9 @@ public function load($pFilename) } } else { // Extract range - if (strpos($definedName['formula'], '!') !== false) { - $explodes = Worksheet::extractSheetTitle($definedName['formula'], true); + $explodes = explode('!', $definedName['formula']); + + if (count($explodes) == 2) { if (($docSheet = $this->spreadsheet->getSheetByName($explodes[0])) || ($docSheet = $this->spreadsheet->getSheetByName(trim($explodes[0], "'")))) { $extractedRange = $explodes[1]; diff --git a/src/PhpSpreadsheet/Reader/Xlsx.php b/src/PhpSpreadsheet/Reader/Xlsx.php index dfb4b8253c..a77098527b 100644 --- a/src/PhpSpreadsheet/Reader/Xlsx.php +++ b/src/PhpSpreadsheet/Reader/Xlsx.php @@ -1833,7 +1833,8 @@ public function load($pFilename) $rangeSets = preg_split("/'(.*?)'(?:![A-Z0-9]+:[A-Z0-9]+,?)/", $extractedRange, PREG_SPLIT_NO_EMPTY); $newRangeSets = []; foreach ($rangeSets as $rangeSet) { - list($sheetName, $rangeSet) = Worksheet::extractSheetTitle($rangeSet, true); + $range = explode('!', $rangeSet); // FIXME: what if sheetname contains exclamation mark? + $rangeSet = isset($range[1]) ? $range[1] : $range[0]; if (strpos($rangeSet, ':') === false) { $rangeSet = $rangeSet . ':' . $rangeSet; } @@ -1880,8 +1881,8 @@ public function load($pFilename) break; default: if ($mapSheetId[(int) $definedName['localSheetId']] !== null) { - if (strpos((string) $definedName, '!') !== false) { - $range = Worksheet::extractSheetTitle((string) $definedName, true); + $range = explode('!', (string) $definedName); + if (count($range) == 2) { $range[0] = str_replace("''", "'", $range[0]); $range[0] = str_replace("'", '', $range[0]); if ($worksheet = $docSheet->getParent()->getSheetByName($range[0])) { @@ -1907,7 +1908,8 @@ public function load($pFilename) $locatedSheet = $excel->getSheetByName($extractedSheetName); // Modify range - list($worksheetName, $extractedRange) = Worksheet::extractSheetTitle($extractedRange, true); + $range = explode('!', $extractedRange); + $extractedRange = isset($range[1]) ? $range[1] : $range[0]; } if ($locatedSheet !== null) { diff --git a/src/PhpSpreadsheet/Worksheet/AutoFilter.php b/src/PhpSpreadsheet/Worksheet/AutoFilter.php index 333aa1b811..b92c986e6c 100644 --- a/src/PhpSpreadsheet/Worksheet/AutoFilter.php +++ b/src/PhpSpreadsheet/Worksheet/AutoFilter.php @@ -89,8 +89,11 @@ public function getRange() */ public function setRange($pRange) { - // extract coordinate - list($worksheet, $pRange) = Worksheet::extractSheetTitle($pRange, true); + // Uppercase coordinate + $cellAddress = explode('!', strtoupper($pRange)); + if (count($cellAddress) > 1) { + list($worksheet, $pRange) = $cellAddress; + } if (strpos($pRange, ':') !== false) { $this->range = $pRange; diff --git a/src/PhpSpreadsheet/Worksheet/Worksheet.php b/src/PhpSpreadsheet/Worksheet/Worksheet.php index f4ee4b60a8..42dcd69b02 100644 --- a/src/PhpSpreadsheet/Worksheet/Worksheet.php +++ b/src/PhpSpreadsheet/Worksheet/Worksheet.php @@ -2729,12 +2729,12 @@ public function getHashCode() public static function extractSheetTitle($pRange, $returnRange = false) { // Sheet title included? - if (($sep = strrpos($pRange, '!')) === false) { - return $returnRange ? ['', $pRange] : ''; + if (($sep = strpos($pRange, '!')) === false) { + return ''; } if ($returnRange) { - return [substr($pRange, 0, $sep), substr($pRange, $sep + 1)]; + return [trim(substr($pRange, 0, $sep), "'"), substr($pRange, $sep + 1)]; } return substr($pRange, $sep + 1); diff --git a/src/PhpSpreadsheet/Writer/Xls/Parser.php b/src/PhpSpreadsheet/Writer/Xls/Parser.php index e87d09a223..00ead3c233 100644 --- a/src/PhpSpreadsheet/Writer/Xls/Parser.php +++ b/src/PhpSpreadsheet/Writer/Xls/Parser.php @@ -3,7 +3,6 @@ namespace PhpOffice\PhpSpreadsheet\Writer\Xls; use PhpOffice\PhpSpreadsheet\Shared\StringHelper; -use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet as PhpspreadsheetWorksheet; use PhpOffice\PhpSpreadsheet\Writer\Exception as WriterException; // Original file header of PEAR::Spreadsheet_Excel_Writer_Parser (used as the base for this class): @@ -644,7 +643,7 @@ private function convertRange2d($range, $class = 0) private function convertRange3d($token) { // Split the ref at the ! symbol - list($ext_ref, $range) = PhpspreadsheetWorksheet::extractSheetTitle($token, true); + list($ext_ref, $range) = explode('!', $token); // Convert the external reference part (different for BIFF8) $ext_ref = $this->getRefIndex($ext_ref); @@ -696,7 +695,7 @@ private function convertRef2d($cell) private function convertRef3d($cell) { // Split the ref at the ! symbol - list($ext_ref, $cell) = PhpspreadsheetWorksheet::extractSheetTitle($cell, true); + list($ext_ref, $cell) = explode('!', $cell); // Convert the external reference part (different for BIFF8) $ext_ref = $this->getRefIndex($ext_ref); diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php b/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php index e3ddb03c14..43a1916f5b 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Workbook.php @@ -339,7 +339,9 @@ private function writeDefinedNameForAutofilter(XMLWriter $objWriter, Worksheet $ $range = Coordinate::splitRange($autoFilterRange); $range = $range[0]; // Strip any worksheet ref so we can make the cell ref absolute - list($ws, $range[0]) = Worksheet::extractSheetTitle($range[0], true); + if (strpos($range[0], '!') !== false) { + list($ws, $range[0]) = explode('!', $range[0]); + } $range[0] = Coordinate::absoluteCoordinate($range[0]); $range[1] = Coordinate::absoluteCoordinate($range[1]); diff --git a/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php b/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php index 78a62e9eca..cb46a12106 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php @@ -748,7 +748,9 @@ private function writeAutoFilter(XMLWriter $objWriter, PhpspreadsheetWorksheet $ $range = Coordinate::splitRange($autoFilterRange); $range = $range[0]; // Strip any worksheet ref - list($ws, $range[0]) = PhpspreadsheetWorksheet::extractSheetTitle($range[0], true); + if (strpos($range[0], '!') !== false) { + list($ws, $range[0]) = explode('!', $range[0]); + } $range = implode(':', $range); $objWriter->writeAttribute('ref', str_replace('$', '', $range)); diff --git a/tests/data/CellAbsoluteCoordinate.php b/tests/data/CellAbsoluteCoordinate.php index 86487585c2..d5eefca1e1 100644 --- a/tests/data/CellAbsoluteCoordinate.php +++ b/tests/data/CellAbsoluteCoordinate.php @@ -42,11 +42,11 @@ '\'Worksheet1\'!$AI256', ], [ - '\'Work!sheet1!\'!$AI$256', - '\'Work!sheet1!\'!AI$256', + '\'Worksheet1\'!$AI$256', + '\'Worksheet1\'!AI$256', ], [ - '\'Work!sheet1!\'!$AI$256', - '\'Work!sheet1!\'!$AI$256', + '\'Worksheet1\'!$AI$256', + '\'Worksheet1\'!$AI$256', ], ]; diff --git a/tests/data/CellAbsoluteReference.php b/tests/data/CellAbsoluteReference.php index 71dac54547..ccf4f33f4b 100644 --- a/tests/data/CellAbsoluteReference.php +++ b/tests/data/CellAbsoluteReference.php @@ -26,12 +26,12 @@ 'AI2012', ], [ - '\'Work!sheet1\'!$AI$256', - '\'Work!sheet1\'!AI256', + '\'Worksheet1\'!$AI$256', + '\'Worksheet1\'!AI256', ], [ - 'Work!sheet1!$AI$256', - 'Work!sheet1!AI256', + 'Worksheet1!$AI$256', + 'Worksheet1!AI256', ], [ '\'Data Worksheet\'!$AI$256', From 5ce0e96cb5fbf8bac8b86418fc9fc6c3b323d695 Mon Sep 17 00:00:00 2001 From: bayzhanov Date: Tue, 2 Oct 2018 13:55:14 +0300 Subject: [PATCH 4/6] Bugfix for issue: xls file cause the exception during open by Xls reader #402 revert commit 4b4831be07249743364a7335178fb44b4b3eeca7 with adding exceptions --- src/PhpSpreadsheet/Shared/OLERead.php | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/PhpSpreadsheet/Shared/OLERead.php b/src/PhpSpreadsheet/Shared/OLERead.php index 87791877fd..fbfa90cf09 100644 --- a/src/PhpSpreadsheet/Shared/OLERead.php +++ b/src/PhpSpreadsheet/Shared/OLERead.php @@ -276,16 +276,11 @@ private function readPropertySets() // type of entry $type = ord($d[self::TYPE_POS]); - try { - // sectorID of first sector or short sector, if this entry refers to a stream (the case with workbook) - // sectorID of first sector of the short-stream container stream, if this entry is root entry - $startBlock = self::getInt4d($d, self::START_BLOCK_POS); - - $size = self::getInt4d($d, self::SIZE_POS); - } catch (ReaderException $e) { - // skip invalid parameters, break loop - break; - } + // sectorID of first sector or short sector, if this entry refers to a stream (the case with workbook) + // sectorID of first sector of the short-stream container stream, if this entry is root entry + $startBlock = self::getInt4d($d, self::START_BLOCK_POS); + + $size = self::getInt4d($d, self::SIZE_POS); $name = str_replace("\x00", '', substr($d, 0, $nameSize)); @@ -331,14 +326,6 @@ private function readPropertySets() */ private static function getInt4d($data, $pos) { - if (trim($data) == '') { - // No data provided - throw new ReaderException('Parameter data is empty.'); - } elseif ($pos < 0) { - // Invalid position - throw new ReaderException('Parameter pos=' . $pos . ' is invalid.'); - } - $len = strlen($data); if ($len < $pos + 4) { $data .= str_repeat("\0", $pos + 4 - $len); From e41b87566b7c70cf5f0a0d3e8a93e46ea29c90a0 Mon Sep 17 00:00:00 2001 From: bayzhanov Date: Wed, 3 Oct 2018 16:06:30 +0300 Subject: [PATCH 5/6] Bugfix for issue: xls file cause the exception during open by Xls reader #402 adding unit tests for OLERead and Reader\Xls, also adding changelog entry --- CHANGELOG.md | 1 + tests/PhpSpreadsheetTests/Reader/XlsTest.php | 20 +++++++++++++ .../Shared/OLEReadTest.php | 28 ++++++++++++++++++ tests/data/Reader/XLS/sample.xls | Bin 0 -> 5109 bytes tests/data/Shared/OLERead/document | 0 tests/data/Shared/OLERead/summary | 0 tests/data/Shared/OLERead/wrkbook | Bin 0 -> 3061 bytes 7 files changed, 49 insertions(+) create mode 100644 tests/PhpSpreadsheetTests/Reader/XlsTest.php create mode 100644 tests/PhpSpreadsheetTests/Shared/OLEReadTest.php create mode 100644 tests/data/Reader/XLS/sample.xls create mode 100755 tests/data/Shared/OLERead/document create mode 100755 tests/data/Shared/OLERead/summary create mode 100755 tests/data/Shared/OLERead/wrkbook diff --git a/CHANGELOG.md b/CHANGELOG.md index 85f3e7d5dc..ce84b071b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +- Xls file cause the exception during open by Xls reader [#402](https://github.com/PHPOffice/PhpSpreadsheet/issues/402) - Allow iterators to go out of bounds with prev - [#587](https://github.com/PHPOffice/PhpSpreadsheet/issues/587) - Fix warning when reading xlsx without styles - [#631](https://github.com/PHPOffice/PhpSpreadsheet/pull/631) diff --git a/tests/PhpSpreadsheetTests/Reader/XlsTest.php b/tests/PhpSpreadsheetTests/Reader/XlsTest.php new file mode 100644 index 0000000000..4379675426 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Reader/XlsTest.php @@ -0,0 +1,20 @@ +load($filename); + self::assertEquals('Title', $spreadsheet->getSheet(0)->getCell('A1')->getValue()); + } +} diff --git a/tests/PhpSpreadsheetTests/Shared/OLEReadTest.php b/tests/PhpSpreadsheetTests/Shared/OLEReadTest.php new file mode 100644 index 0000000000..3d9d5a8eb4 --- /dev/null +++ b/tests/PhpSpreadsheetTests/Shared/OLEReadTest.php @@ -0,0 +1,28 @@ +read('./data/Reader/XLS/sample.xls'); + self::assertEquals( + file_get_contents($dataDir . 'wrkbook'), + $ole->getStream($ole->wrkbook) + ); + self::assertEquals( + file_get_contents($dataDir . 'summary'), + $ole->getStream($ole->summaryInformation) + ); + self::assertEquals( + file_get_contents($dataDir . 'document'), + $ole->getStream($ole->documentSummaryInformation) + ); + } +} \ No newline at end of file diff --git a/tests/data/Reader/XLS/sample.xls b/tests/data/Reader/XLS/sample.xls new file mode 100644 index 0000000000000000000000000000000000000000..65fcba55a8dcda0ea01ad60866092a231086643f GIT binary patch literal 5109 zcmeH~&u>&!6vxkd^Jd!V&zb2D1i?N8sUQMP4QLDq2pA$I$d71ZT$Iv6LuqSig)RuQ zac>kbv(qIT6B9Q;B3&9Yi6;C3R{sJQlCV&opYOdh%s{7sxG^Gc=G^=4dEay2x#!$_ z&UruolwbV%+f~2XBiAlV+5IGInL2*Jy~tfTvydB&?wzxt(!#+V;N7&p|7pRnYU$YG@7g0@Me^&|2t4XdSd3dI{P9^+PX18=+0mE6`@>RcH&e z6?zt%>UaJ>yU#Y`#Z206wU-t0UF_c(Xh-bCuZzLBmG@rW@VXw6>putw@a7NPCzn5~ z9QSmvhZ8(*!!}|6-qY3gRh?FWWrE{qbcU#Mj(*YYO|!d6461r9#Nulij{nD#@nxGv z_~rPTwGsYl<_GRpf@SB#wXB*-(?8-nf>d$=scHiwj zi@tY$_k7}4m0!^_LmUhg&zA60%kVqkH<~A02CtL!F#dD<&HNct3Uf)U(kP=j4mU*^ zsL~YaiyCmVu&_W^v{EUt(%=~RxNK$cWBd~MHpaND35#wn%?XH+eqyVI2}W{d{d3B^w+|Y_MF04_Z`$#+ZJrWY?};GXOSNf-%S+DmfanJ9qBb_3PK|i!icW zF_oy#7c;Ie6eHJn6`Nd-Lay&Frjt+c+K-VGOb5p}%cJ~e?VCXU38EF$r8yk@2`@35O4wQ)$EyxLkDr^uN%bG30~ zk@dIL#%U^}D^0a=hS++gxi)U1#{RhOea)=rR-yJhYgxNdhi_q(H(F}XTgl1w<2H1z z*SDQq9oETrkhiDm^ywsrAL^{lmm{D5Qa8@CM~8Z9&kJ~Cy1h2;;*8Y4znfTkwQl`A z)B<0w^!VmbwE|ZVIF~I1ohF_e1oIDgQOLRD>cMsd@NwKdfzzY#O$Y6zoFLnrBBqa1 zt&ZDy0HZGZOxkISZHUn+_#?#pS^6nZ=Mh(x5-=+}XULA(yLJNRI#>b4O1rVUM!?P? zvzPuPRmL`=#&$Mx6sqD0k>xZWw0#x1(96AHJ2?C*#2hSZ56e1ehmn&7)5u{# zy;sH>O**yJep9ylX47kMJ91q`CEWA-32@jJ$2K z-Zn>pPNInSTDIbXxW9jocfne^7N7*Fnv0Jx*9;q5=VG=Z+Va5RKHPbSw<3yrj-lc- zKP^k5L72gJt=dna%J4Q|q_%x1BS*>hbHGNNUADyNsgE(ATq51QBfJ`&PV)go zbBI#dDQ5`gec~g;UssXY6tieE@X>AsQ+0X=f|j#hmFmcIHV& nRTp*hH5G;WB2tVc2viqZwMT5nfuBQ}iHh^QGCk<7kGa1Ao=w)L literal 0 HcmV?d00001 diff --git a/tests/data/Shared/OLERead/document b/tests/data/Shared/OLERead/document new file mode 100755 index 0000000000..e69de29bb2 diff --git a/tests/data/Shared/OLERead/summary b/tests/data/Shared/OLERead/summary new file mode 100755 index 0000000000..e69de29bb2 diff --git a/tests/data/Shared/OLERead/wrkbook b/tests/data/Shared/OLERead/wrkbook new file mode 100755 index 0000000000000000000000000000000000000000..ad344aa550e1c84f4fc61e987052dc0c14479a55 GIT binary patch literal 3061 zcmds(&2Lmy7{;G_=XN?X?R>UVL^NE2N)$nw8qgRO5HUpBR9g}grI8r4`L|aUjdf#lsrnfMh{?DzUf7e@XcEazbH>*40|IhkB zv4z*Ud_JYadc0%)U-kOOPvc+T1^?PE`23FeEUPkLE$i=U^}+rJ`xX7->hAT`R4?ym zRuTAt9rT%9^dS+fLe!|4zTl@3ACFlvpA<4I+Q7Nz^obr)knRP2kVQ#s*ze ztyZGeNCRkFZSW251ic!_Z8O+(w#=rt=PWoIHVY)jYr{{HmRiV33odq(c1t6TL?i7s zdeHW?cp8{*v~=gr9Rbit3&jXOo|bzW+T7gK`ue)Q4h)smuI+F^;2N=38Fp9(fg}Fmv<*wW!p)nu;c)?H>Dw-_rjWf zwnI)Qt?67h)bIXfs%6)k%pAH`O65?YZug~fMj73!q;jN4hx${wM?JdLo61?v)?2w$ z?p3e8>Y6V{JojtqcwTwk?ZOvS(A`2h-lx88az8$I`&(2|VHdxol9sysDXXmW<Oj?_KLU7Mb7kjE%ICeFyr1ni<(ueQKXCLr#bUi>6buV zfzEEjK%EK&qngmix`6T^s(?jN6sv0*>>8ZY^k3?Tj&W)nXCX&n5pD>V-F!}GI=s;H z-qs2B?J@2XU`J@*bnS6q``~5ZA+vaa+*>_90%qa+I^^Ku@E9s9 zUKD0n6FC?+6nst;OO$*bbgXC1#~Q~+3x0(vO%d899R=yJUpsy5-uTzi&4DmotgEzB za6ERD|2A$lw|J+RZxPwP6jrck(k#BmjIYqnp_!#MzpS@l4YA$Yq6;W?W7A;Qh{5Kz z^ju-CH?TgCy{wL>jDDY!rGe8KymQl1H1T;{g0j2eVlYS(A$DSVk3`hoFkJA*S;D9imCuxXc9 zUs+G-XIn<0?eroP-jbs(2~o(>MKwel40jNvEyR?rp&DSU1cJpn?DmoEg(y6Ntuja! z?T6s3;C_`^ACo>SiTUme;oT@Z&xfH_pz>j7?+ka2icI3zq<_VsVVDUuLzZB^uN|Y#xSSXDo-nR-jw?h&2iPGR`b?iszlF J Date: Wed, 3 Oct 2018 17:06:58 +0300 Subject: [PATCH 6/6] Bugfix for issue: xls file cause the exception during open by Xls reader #402 codestyle fixes --- tests/PhpSpreadsheetTests/Reader/XlsTest.php | 2 +- tests/PhpSpreadsheetTests/Shared/OLEReadTest.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/PhpSpreadsheetTests/Reader/XlsTest.php b/tests/PhpSpreadsheetTests/Reader/XlsTest.php index 4379675426..f629fed112 100644 --- a/tests/PhpSpreadsheetTests/Reader/XlsTest.php +++ b/tests/PhpSpreadsheetTests/Reader/XlsTest.php @@ -8,7 +8,7 @@ class XlsTest extends TestCase { /** - * Test load Xls file + * Test load Xls file. */ public function testLoadXlsSample() { diff --git a/tests/PhpSpreadsheetTests/Shared/OLEReadTest.php b/tests/PhpSpreadsheetTests/Shared/OLEReadTest.php index 3d9d5a8eb4..a004c4aef5 100644 --- a/tests/PhpSpreadsheetTests/Shared/OLEReadTest.php +++ b/tests/PhpSpreadsheetTests/Shared/OLEReadTest.php @@ -25,4 +25,4 @@ public function testReadOleStreams() $ole->getStream($ole->documentSummaryInformation) ); } -} \ No newline at end of file +}