Skip to content

Commit

Permalink
Using htmlspecialchars to fix issue #3145 (#3146)
Browse files Browse the repository at this point in the history
* Using htmlspecialchars to fix issue #3145: this prevents the SimpleXMLElement error "unterminated entity reference" when HTML entities are present in a worksheet

* replace htmlspecialchars with proposal of oleibman

* eliminate string cast, because PhpStan has a problem with that

* ignore string cast for phpstan + enhance unit test
  • Loading branch information
zappzerapp authored Nov 1, 2022
1 parent c16d86d commit 3e40532
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
5 changes: 4 additions & 1 deletion src/PhpSpreadsheet/Reader/Xlsx.php
Original file line number Diff line number Diff line change
Expand Up @@ -940,7 +940,10 @@ protected function loadSpreadsheetFromFile(string $filename): Spreadsheet
}
$node->addAttribute('sqref', $item->children(Namespaces::DATA_VALIDATIONS2)->sqref);
if (isset($item->formula1)) {
$node->addChild('formula1', $item->formula1->children(Namespaces::DATA_VALIDATIONS2)->f);
$childNode = $node->addChild('formula1');
if ($childNode !== null) { // null should never happen
$childNode[0] = (string) $item->formula1->children(Namespaces::DATA_VALIDATIONS2)->f; // @phpstan-ignore-line
}
}
}
}
Expand Down
23 changes: 23 additions & 0 deletions tests/PhpSpreadsheetTests/Reader/Xlsx/Issue3145Test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;

use PhpOffice\PhpSpreadsheet\IOFactory;
use PHPUnit\Framework\TestCase;

class Issue3145Test extends TestCase
{
public function testIssue3145(): void
{
$filename = 'tests/data/Reader/XLSX/issue.3145.xlsx';
$reader = IOFactory::createReader('Xlsx');
$spreadsheet = $reader->load($filename);
$sheet = $spreadsheet->getActiveSheet();

self::assertEquals('Headline A', $sheet->getCell('A1')->getValue());
self::assertEquals('Configdential B', $sheet->getCell('A2')->getValue());
self::assertSame('OFFSET(INDIRECT(SUBSTITUTE($A2," ","")),0,0,COUNTA(INDIRECT(SUBSTITUTE($A2," ","")&"Col")),1)', $sheet->getCell('B2')->getDataValidation()->getFormula1());

$spreadsheet->disconnectWorksheets();
}
}
Binary file added tests/data/Reader/XLSX/issue.3145.xlsx
Binary file not shown.

0 comments on commit 3e40532

Please sign in to comment.