From 153a3a6af688387bd544a5a4dabbac8833e13589 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Wed, 11 May 2022 16:06:19 +0200 Subject: [PATCH 1/3] Fix for null value passed to extractSheetTitle() --- phpstan-baseline.neon | 27 +++++++++++++--------- src/PhpSpreadsheet/Worksheet/Worksheet.php | 4 ++++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index f862d205..007a44a8 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -95,6 +95,11 @@ parameters: count: 1 path: src/PhpSpreadsheet/Calculation/Calculation.php + - + message: "#^Negated boolean expression is always true\\.$#" + count: 1 + path: src/PhpSpreadsheet/Calculation/Calculation.php + - message: "#^Offset 'type' does not exist on array\\|null\\.$#" count: 3 @@ -2290,6 +2295,11 @@ parameters: count: 1 path: src/PhpSpreadsheet/Reader/Xls.php + - + message: "#^Right side of && is always true\\.$#" + count: 1 + path: src/PhpSpreadsheet/Reader/Xls.php + - message: "#^Unreachable statement \\- code above always terminates\\.$#" count: 8 @@ -3000,6 +3010,11 @@ parameters: count: 1 path: src/PhpSpreadsheet/Reader/Xlsx/SheetViewOptions.php + - + message: "#^Right side of && is always true\\.$#" + count: 1 + path: src/PhpSpreadsheet/Reader/Xlsx/Styles.php + - message: "#^Parameter \\#1 \\$haystack of function strpos expects string, string\\|false given\\.$#" count: 1 @@ -4197,7 +4212,7 @@ parameters: - message: "#^Strict comparison using \\=\\=\\= between string and null will always evaluate to false\\.$#" - count: 1 + count: 2 path: src/PhpSpreadsheet/Worksheet/Worksheet.php - @@ -5240,11 +5255,6 @@ parameters: count: 1 path: src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php - - - message: "#^Negated boolean expression is always false\\.$#" - count: 1 - path: src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php - - message: "#^Parameter \\#2 \\$content of method XMLWriter\\:\\:writeElement\\(\\) expects string\\|null, int\\|string given\\.$#" count: 1 @@ -5285,11 +5295,6 @@ parameters: count: 1 path: src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php - - - message: "#^Strict comparison using \\=\\=\\= between false and true will always evaluate to false\\.$#" - count: 2 - path: src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php - - message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Xlfn\\:\\:addXlfn\\(\\) should return string but returns string\\|null\\.$#" count: 1 diff --git a/src/PhpSpreadsheet/Worksheet/Worksheet.php b/src/PhpSpreadsheet/Worksheet/Worksheet.php index 4c0237f5..dd2770d4 100644 --- a/src/PhpSpreadsheet/Worksheet/Worksheet.php +++ b/src/PhpSpreadsheet/Worksheet/Worksheet.php @@ -3011,6 +3011,10 @@ class Worksheet implements IComparable */ public static function extractSheetTitle($range, $returnRange = false) { + if ($range === null) { + return $returnRange ? [null, null] : null; + } + // Sheet title included? if (($sep = strrpos($range, '!')) === false) { return $returnRange ? ['', $range] : ''; From 65053d711cb842b76e8827ca97486a79c79d02d9 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Wed, 11 May 2022 16:06:44 +0200 Subject: [PATCH 2/3] Assertion updates --- .../Writer/Xlsx/DrawingsTest.php | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php index ccbced32..f089b9ee 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/DrawingsTest.php @@ -88,7 +88,7 @@ class DrawingsTest extends AbstractFunctional $sheet = $spreadsheet->getActiveSheet(); $comment = $sheet->getComment('A1'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 178); @@ -127,7 +127,7 @@ class DrawingsTest extends AbstractFunctional $comment->setSizeAsBackgroundImage(); self::assertEquals($comment->getWidth(), '112.5pt'); self::assertEquals($comment->getHeight(), '112.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_GIF); @@ -144,7 +144,7 @@ class DrawingsTest extends AbstractFunctional $comment->setSizeAsBackgroundImage(); self::assertEquals($comment->getWidth(), '52.5pt'); self::assertEquals($comment->getHeight(), '52.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_BMP); @@ -162,7 +162,7 @@ class DrawingsTest extends AbstractFunctional $comment = $sheet->getComment('A1'); self::assertEquals($comment->getWidth(), '112.5pt'); self::assertEquals($comment->getHeight(), '112.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 150); @@ -173,7 +173,7 @@ class DrawingsTest extends AbstractFunctional $comment = $sheet->getComment('A2'); self::assertEquals($comment->getWidth(), '52.5pt'); self::assertEquals($comment->getHeight(), '52.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 70); @@ -208,7 +208,7 @@ class DrawingsTest extends AbstractFunctional self::assertEquals($comment->getHeight(), '75pt'); $comment = $sheet->getComment('A1'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_PNG); @@ -227,7 +227,7 @@ class DrawingsTest extends AbstractFunctional self::assertEquals($comment->getHeight(), '112.5pt'); $comment = $sheet->getComment('A2'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_GIF); @@ -246,7 +246,7 @@ class DrawingsTest extends AbstractFunctional self::assertEquals($comment->getHeight(), '37.5pt'); $comment = $sheet->getComment('A3'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_JPEG); @@ -265,7 +265,7 @@ class DrawingsTest extends AbstractFunctional self::assertEquals($comment->getHeight(), '52.5pt'); $comment = $sheet->getComment('A4'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_BMP); @@ -284,7 +284,7 @@ class DrawingsTest extends AbstractFunctional self::assertEquals($comment->getHeight(), '52.5pt'); $comment = $sheet->getComment('A5'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_BMP); @@ -304,7 +304,7 @@ class DrawingsTest extends AbstractFunctional self::assertEquals($comment->getHeight(), '52.5pt'); $comment = $sheet->getComment('A6'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_BMP); @@ -317,7 +317,7 @@ class DrawingsTest extends AbstractFunctional self::assertStringContainsString('purple_square.tiff', $drawing->getFilename()); self::assertFalse($drawing->getIsUrl()); $comment = $sheet->getComment('A7'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertFalse($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getType(), IMAGETYPE_UNKNOWN); @@ -326,7 +326,7 @@ class DrawingsTest extends AbstractFunctional $comment->setBackgroundImage($drawing); self::fail('Should throw exception when attempting to add tiff'); } catch (PhpSpreadsheetException $e) { - self::assertTrue($e instanceof PhpSpreadsheetException); + self::assertInstanceOf(PhpSpreadsheetException::class, $e); self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); } @@ -334,7 +334,7 @@ class DrawingsTest extends AbstractFunctional $drawing->getImageTypeForSave(); self::fail('Should throw exception when attempting to get image type for tiff'); } catch (PhpSpreadsheetException $e) { - self::assertTrue($e instanceof PhpSpreadsheetException); + self::assertInstanceOf(PhpSpreadsheetException::class, $e); self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); } @@ -342,7 +342,7 @@ class DrawingsTest extends AbstractFunctional $drawing->getMediaFilename(); self::fail('Should throw exception when attempting to get media file name for tiff'); } catch (PhpSpreadsheetException $e) { - self::assertTrue($e instanceof PhpSpreadsheetException); + self::assertInstanceOf(PhpSpreadsheetException::class, $e); self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); } @@ -350,7 +350,7 @@ class DrawingsTest extends AbstractFunctional $drawing->getImageFileExtensionForSave(); self::fail('Should throw exception when attempting to get image file extention for tiff'); } catch (PhpSpreadsheetException $e) { - self::assertTrue($e instanceof PhpSpreadsheetException); + self::assertInstanceOf(PhpSpreadsheetException::class, $e); self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); } @@ -358,7 +358,7 @@ class DrawingsTest extends AbstractFunctional $drawing->getImageMimeType(); self::fail('Should throw exception when attempting to get image mime type for tiff'); } catch (PhpSpreadsheetException $e) { - self::assertTrue($e instanceof PhpSpreadsheetException); + self::assertInstanceOf(PhpSpreadsheetException::class, $e); self::assertEquals($e->getMessage(), 'Unsupported image type in comment background. Supported types: PNG, JPEG, BMP, GIF.'); } @@ -375,7 +375,7 @@ class DrawingsTest extends AbstractFunctional $comment = $sheet->getComment('A1'); self::assertEquals($comment->getWidth(), '75pt'); self::assertEquals($comment->getHeight(), '75pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 100); @@ -386,7 +386,7 @@ class DrawingsTest extends AbstractFunctional $comment = $sheet->getComment('A2'); self::assertEquals($comment->getWidth(), '112.5pt'); self::assertEquals($comment->getHeight(), '112.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 150); @@ -397,7 +397,7 @@ class DrawingsTest extends AbstractFunctional $comment = $sheet->getComment('A3'); self::assertEquals($comment->getWidth(), '37.5pt'); self::assertEquals($comment->getHeight(), '37.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 50); @@ -408,7 +408,7 @@ class DrawingsTest extends AbstractFunctional $comment = $sheet->getComment('A4'); self::assertEquals($comment->getWidth(), '52.5pt'); self::assertEquals($comment->getHeight(), '52.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 70); @@ -419,7 +419,7 @@ class DrawingsTest extends AbstractFunctional $comment = $sheet->getComment('A5'); self::assertEquals($comment->getWidth(), '52.5pt'); self::assertEquals($comment->getHeight(), '52.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 70); @@ -430,7 +430,7 @@ class DrawingsTest extends AbstractFunctional $comment = $sheet->getComment('A6'); self::assertEquals($comment->getWidth(), '52.5pt'); self::assertEquals($comment->getHeight(), '52.5pt'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertTrue($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 70); @@ -439,7 +439,7 @@ class DrawingsTest extends AbstractFunctional // Check seventh image in comment background $comment = $sheet->getComment('A7'); - self::assertTrue($comment instanceof Comment); + self::assertInstanceOf(Comment::class, $comment); self::assertFalse($comment->hasBackgroundImage()); self::assertTrue($comment->getBackgroundImage() instanceof Drawing); self::assertEquals($comment->getBackgroundImage()->getWidth(), 0); From dd3ed498e91c303301671a834a68b2c2d3457ee9 Mon Sep 17 00:00:00 2001 From: MarkBaker Date: Wed, 11 May 2022 18:48:05 +0200 Subject: [PATCH 3/3] Trying to rationalise phpstan between local and CI --- phpstan-baseline.neon | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 007a44a8..74087f44 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -95,11 +95,6 @@ parameters: count: 1 path: src/PhpSpreadsheet/Calculation/Calculation.php - - - message: "#^Negated boolean expression is always true\\.$#" - count: 1 - path: src/PhpSpreadsheet/Calculation/Calculation.php - - message: "#^Offset 'type' does not exist on array\\|null\\.$#" count: 3 @@ -2295,11 +2290,6 @@ parameters: count: 1 path: src/PhpSpreadsheet/Reader/Xls.php - - - message: "#^Right side of && is always true\\.$#" - count: 1 - path: src/PhpSpreadsheet/Reader/Xls.php - - message: "#^Unreachable statement \\- code above always terminates\\.$#" count: 8 @@ -3010,11 +3000,6 @@ parameters: count: 1 path: src/PhpSpreadsheet/Reader/Xlsx/SheetViewOptions.php - - - message: "#^Right side of && is always true\\.$#" - count: 1 - path: src/PhpSpreadsheet/Reader/Xlsx/Styles.php - - message: "#^Parameter \\#1 \\$haystack of function strpos expects string, string\\|false given\\.$#" count: 1 @@ -5255,6 +5240,11 @@ parameters: count: 1 path: src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php + - + message: "#^Negated boolean expression is always false\\.$#" + count: 1 + path: src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php + - message: "#^Parameter \\#2 \\$content of method XMLWriter\\:\\:writeElement\\(\\) expects string\\|null, int\\|string given\\.$#" count: 1 @@ -5295,6 +5285,11 @@ parameters: count: 1 path: src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php + - + message: "#^Strict comparison using \\=\\=\\= between false and true will always evaluate to false\\.$#" + count: 2 + path: src/PhpSpreadsheet/Writer/Xlsx/Worksheet.php + - message: "#^Method PhpOffice\\\\PhpSpreadsheet\\\\Writer\\\\Xlsx\\\\Xlfn\\:\\:addXlfn\\(\\) should return string but returns string\\|null\\.$#" count: 1