COLUMNS and ROWS functions crashed in some cases
Fixes #336 Fixes https://github.com/PHPOffice/PHPExcel/issues/1383
This commit is contained in:
parent
4635d39b4a
commit
bf2dbbaf10
|
@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
- Better auto-detection of CSV separators - [#305](https://github.com/PHPOffice/PhpSpreadsheet/issues/305)
|
- Better auto-detection of CSV separators - [#305](https://github.com/PHPOffice/PhpSpreadsheet/issues/305)
|
||||||
- Support for shape style ending with `;` - [#304](https://github.com/PHPOffice/PhpSpreadsheet/issues/304)
|
- Support for shape style ending with `;` - [#304](https://github.com/PHPOffice/PhpSpreadsheet/issues/304)
|
||||||
- Freeze Panes takes wrong coordinates for XLSX - [#322](https://github.com/PHPOffice/PhpSpreadsheet/issues/322)
|
- Freeze Panes takes wrong coordinates for XLSX - [#322](https://github.com/PHPOffice/PhpSpreadsheet/issues/322)
|
||||||
|
- `COLUMNS` and `ROWS` functions crashed in some cases - [#336](https://github.com/PHPOffice/PhpSpreadsheet/issues/336)
|
||||||
|
|
||||||
## [1.0.0] - 2017-12-25
|
## [1.0.0] - 2017-12-25
|
||||||
|
|
||||||
|
|
|
@ -2784,11 +2784,11 @@ class Calculation
|
||||||
/**
|
/**
|
||||||
* Read the dimensions of a matrix, and re-index it with straight numeric keys starting from row 0, column 0.
|
* Read the dimensions of a matrix, and re-index it with straight numeric keys starting from row 0, column 0.
|
||||||
*
|
*
|
||||||
* @param mixed &$matrix matrix operand
|
* @param array &$matrix matrix operand
|
||||||
*
|
*
|
||||||
* @return int[] An array comprising the number of rows, and number of columns
|
* @return int[] An array comprising the number of rows, and number of columns
|
||||||
*/
|
*/
|
||||||
private static function getMatrixDimensions(&$matrix)
|
public static function getMatrixDimensions(array &$matrix)
|
||||||
{
|
{
|
||||||
$matrixRows = count($matrix);
|
$matrixRows = count($matrix);
|
||||||
$matrixColumns = 0;
|
$matrixColumns = 0;
|
||||||
|
|
|
@ -138,7 +138,7 @@ class LookupRef
|
||||||
|
|
||||||
reset($cellAddress);
|
reset($cellAddress);
|
||||||
$isMatrix = (is_numeric(key($cellAddress)));
|
$isMatrix = (is_numeric(key($cellAddress)));
|
||||||
list($columns, $rows) = Calculation::_getMatrixDimensions($cellAddress);
|
list($columns, $rows) = Calculation::getMatrixDimensions($cellAddress);
|
||||||
|
|
||||||
if ($isMatrix) {
|
if ($isMatrix) {
|
||||||
return $rows;
|
return $rows;
|
||||||
|
@ -218,7 +218,7 @@ class LookupRef
|
||||||
|
|
||||||
reset($cellAddress);
|
reset($cellAddress);
|
||||||
$isMatrix = (is_numeric(key($cellAddress)));
|
$isMatrix = (is_numeric(key($cellAddress)));
|
||||||
list($columns, $rows) = Calculation::_getMatrixDimensions($cellAddress);
|
list($columns, $rows) = Calculation::getMatrixDimensions($cellAddress);
|
||||||
|
|
||||||
if ($isMatrix) {
|
if ($isMatrix) {
|
||||||
return $columns;
|
return $columns;
|
||||||
|
|
|
@ -79,4 +79,36 @@ class LookupRefTest extends TestCase
|
||||||
{
|
{
|
||||||
return require 'data/Calculation/LookupRef/INDEX.php';
|
return require 'data/Calculation/LookupRef/INDEX.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider providerCOLUMNS
|
||||||
|
*
|
||||||
|
* @param mixed $expectedResult
|
||||||
|
*/
|
||||||
|
public function testCOLUMNS($expectedResult, ...$args)
|
||||||
|
{
|
||||||
|
$result = LookupRef::COLUMNS(...$args);
|
||||||
|
self::assertEquals($expectedResult, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function providerCOLUMNS()
|
||||||
|
{
|
||||||
|
return require 'data/Calculation/LookupRef/COLUMNS.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider providerROWS
|
||||||
|
*
|
||||||
|
* @param mixed $expectedResult
|
||||||
|
*/
|
||||||
|
public function testROWS($expectedResult, ...$args)
|
||||||
|
{
|
||||||
|
$result = LookupRef::ROWS(...$args);
|
||||||
|
self::assertEquals($expectedResult, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function providerROWS()
|
||||||
|
{
|
||||||
|
return require 'data/Calculation/LookupRef/ROWS.php';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
null,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
'',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'#VALUE!',
|
||||||
|
'foo',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
[],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
[1],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
[1, 1],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
2,
|
||||||
|
[[1, 1]],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
['a' => [1, 1]],
|
||||||
|
],
|
||||||
|
];
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
null,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
'',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'#VALUE!',
|
||||||
|
'foo',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
[],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
[1],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
2,
|
||||||
|
[1, 1],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
[[1, 1]],
|
||||||
|
],
|
||||||
|
[
|
||||||
|
2,
|
||||||
|
['a' => [1, 1]],
|
||||||
|
],
|
||||||
|
];
|
Loading…
Reference in New Issue