Skip to content

Commit

Permalink
fixed php8 deprecation warning for libxml_disable_entity_loader() (PH…
Browse files Browse the repository at this point in the history
…POffice#1625)

* fixed php8 deprecation warning for libxml_disable_entity_loader()
  • Loading branch information
brainfoolong authored and Gianluca Giovinazzo committed Dec 14, 2020
1 parent 0b2c2e1 commit d87d8c8
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 13 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,7 @@ and this project adheres to [Semantic Versioning](https://semver.org).
- Ignore inlineStr type if formula element exists - @ncrypthic [#570](https://github.com/PHPOffice/PHPExcel/issues/570)
- Excel 2007 Reader freezes because of conditional formatting - @rentalhost [#575](https://github.com/PHPOffice/PHPExcel/issues/575)
- Readers will now parse files containing worksheet titles over 31 characters [#176](https://github.com/PHPOffice/PhpSpreadsheet/pull/176)
- Fixed PHP8 deprecation warning for libxml_disable_entity_loader() [#1625](https://github.com/phpoffice/phpspreadsheet/pull/1625)

### General

Expand All @@ -581,4 +582,4 @@ For a comprehensive list of all class changes, and a semi-automated migration pa

## Previous versions of PHPExcel

The changelog for the project when it was called PHPExcel is [still available](./CHANGELOG.PHPExcel.md).
The changelog for the project when it was called PHPExcel is [still available](./CHANGELOG.PHPExcel.md).
4 changes: 2 additions & 2 deletions src/PhpSpreadsheet/Reader/Security/XmlScanner.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public static function threadSafeLibxmlDisableEntityLoaderAvailability()

private function disableEntityLoaderCheck(): void
{
if (Settings::getLibXmlDisableEntityLoader()) {
if (Settings::getLibXmlDisableEntityLoader() && \PHP_VERSION_ID < 80000) {
$libxmlDisableEntityLoaderValue = libxml_disable_entity_loader(true);

if (self::$libxmlDisableEntityLoaderValue === null) {
Expand All @@ -74,7 +74,7 @@ private function disableEntityLoaderCheck(): void

public static function shutdown(): void
{
if (self::$libxmlDisableEntityLoaderValue !== null) {
if (self::$libxmlDisableEntityLoaderValue !== null && \PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader(self::$libxmlDisableEntityLoaderValue);
self::$libxmlDisableEntityLoaderValue = null;
}
Expand Down
25 changes: 20 additions & 5 deletions tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,10 @@ class XmlScannerTest extends TestCase
{
protected function setUp(): void
{
libxml_disable_entity_loader(false);
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader(false);
}
}

/**
Expand All @@ -24,13 +27,19 @@ protected function setUp(): void
*/
public function testValidXML($filename, $expectedResult, $libxmlDisableEntityLoader): void
{
$oldDisableEntityLoaderState = libxml_disable_entity_loader($libxmlDisableEntityLoader);
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
$oldDisableEntityLoaderState = libxml_disable_entity_loader($libxmlDisableEntityLoader);
}

$reader = XmlScanner::getInstance(new \PhpOffice\PhpSpreadsheet\Reader\Xml());
$result = $reader->scanFile($filename);
self::assertEquals($expectedResult, $result);

libxml_disable_entity_loader($oldDisableEntityLoaderState);
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader($oldDisableEntityLoaderState);
}
}

public function providerValidXML()
Expand All @@ -56,13 +65,19 @@ public function testInvalidXML($filename, $libxmlDisableEntityLoader): void
{
$this->expectException(\PhpOffice\PhpSpreadsheet\Reader\Exception::class);

libxml_disable_entity_loader($libxmlDisableEntityLoader);
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader($libxmlDisableEntityLoader);
}

$reader = XmlScanner::getInstance(new \PhpOffice\PhpSpreadsheet\Reader\Xml());
$expectedResult = 'FAILURE: Should throw an Exception rather than return a value';
$result = $reader->scanFile($filename);
self::assertEquals($expectedResult, $result);
self::assertEquals($libxmlDisableEntityLoader, libxml_disable_entity_loader());
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
self::assertEquals($libxmlDisableEntityLoader, libxml_disable_entity_loader());
}
}

public function providerInvalidXML()
Expand Down
22 changes: 17 additions & 5 deletions tests/PhpSpreadsheetTests/SettingsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,39 @@ class SettingsTest extends TestCase

protected function setUp(): void
{
$this->prevValue = libxml_disable_entity_loader();
libxml_disable_entity_loader(false); // Enable entity loader
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
$this->prevValue = libxml_disable_entity_loader();
libxml_disable_entity_loader(false); // Enable entity loader
}
}

protected function tearDown(): void
{
libxml_disable_entity_loader($this->prevValue);
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader($this->prevValue);
}
}

public function testGetXMLSettings(): void
{
$result = Settings::getLibXmlLoaderOptions();
self::assertTrue((bool) ((LIBXML_DTDLOAD | LIBXML_DTDATTR) & $result));
self::assertFalse(libxml_disable_entity_loader());
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
self::assertFalse(libxml_disable_entity_loader());
}
}

public function testSetXMLSettings(): void
{
Settings::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID);
$result = Settings::getLibXmlLoaderOptions();
self::assertTrue((bool) ((LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID) & $result));
self::assertFalse(libxml_disable_entity_loader());
// php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
if (\PHP_VERSION_ID < 80000) {
self::assertFalse(libxml_disable_entity_loader());
}
}
}

0 comments on commit d87d8c8

Please sign in to comment.