fixed php8 deprecation warning for libxml_disable_entity_loader() (#1625)

* fixed php8 deprecation warning for libxml_disable_entity_loader()
This commit is contained in:
Roland Eigelsreiter 2020-10-08 15:02:14 +02:00 committed by GitHub
parent 12bdcaa783
commit ab4d7413b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 13 deletions

View File

@ -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) - 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) - 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) - 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 ### General
@ -581,4 +582,4 @@ For a comprehensive list of all class changes, and a semi-automated migration pa
## Previous versions of PHPExcel ## 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).

View File

@ -63,7 +63,7 @@ class XmlScanner
private function disableEntityLoaderCheck(): void private function disableEntityLoaderCheck(): void
{ {
if (Settings::getLibXmlDisableEntityLoader()) { if (Settings::getLibXmlDisableEntityLoader() && \PHP_VERSION_ID < 80000) {
$libxmlDisableEntityLoaderValue = libxml_disable_entity_loader(true); $libxmlDisableEntityLoaderValue = libxml_disable_entity_loader(true);
if (self::$libxmlDisableEntityLoaderValue === null) { if (self::$libxmlDisableEntityLoaderValue === null) {
@ -74,7 +74,7 @@ class XmlScanner
public static function shutdown(): void public static function shutdown(): void
{ {
if (self::$libxmlDisableEntityLoaderValue !== null) { if (self::$libxmlDisableEntityLoaderValue !== null && \PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader(self::$libxmlDisableEntityLoaderValue); libxml_disable_entity_loader(self::$libxmlDisableEntityLoaderValue);
self::$libxmlDisableEntityLoaderValue = null; self::$libxmlDisableEntityLoaderValue = null;
} }

View File

@ -12,7 +12,10 @@ class XmlScannerTest extends TestCase
{ {
protected function setUp(): void 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);
}
} }
/** /**
@ -24,13 +27,19 @@ class XmlScannerTest extends TestCase
*/ */
public function testValidXML($filename, $expectedResult, $libxmlDisableEntityLoader): 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()); $reader = XmlScanner::getInstance(new \PhpOffice\PhpSpreadsheet\Reader\Xml());
$result = $reader->scanFile($filename); $result = $reader->scanFile($filename);
self::assertEquals($expectedResult, $result); 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() public function providerValidXML()
@ -56,13 +65,19 @@ class XmlScannerTest extends TestCase
{ {
$this->expectException(\PhpOffice\PhpSpreadsheet\Reader\Exception::class); $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()); $reader = XmlScanner::getInstance(new \PhpOffice\PhpSpreadsheet\Reader\Xml());
$expectedResult = 'FAILURE: Should throw an Exception rather than return a value'; $expectedResult = 'FAILURE: Should throw an Exception rather than return a value';
$result = $reader->scanFile($filename); $result = $reader->scanFile($filename);
self::assertEquals($expectedResult, $result); 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() public function providerInvalidXML()

View File

@ -14,20 +14,29 @@ class SettingsTest extends TestCase
protected function setUp(): void protected function setUp(): void
{ {
$this->prevValue = libxml_disable_entity_loader(); // php 8.+ deprecated libxml_disable_entity_loader() - It's on by default
libxml_disable_entity_loader(false); // Enable entity loader if (\PHP_VERSION_ID < 80000) {
$this->prevValue = libxml_disable_entity_loader();
libxml_disable_entity_loader(false); // Enable entity loader
}
} }
protected function tearDown(): void 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 public function testGetXMLSettings(): void
{ {
$result = Settings::getLibXmlLoaderOptions(); $result = Settings::getLibXmlLoaderOptions();
self::assertTrue((bool) ((LIBXML_DTDLOAD | LIBXML_DTDATTR) & $result)); 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 public function testSetXMLSettings(): void
@ -35,6 +44,9 @@ class SettingsTest extends TestCase
Settings::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID); Settings::setLibXmlLoaderOptions(LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID);
$result = Settings::getLibXmlLoaderOptions(); $result = Settings::getLibXmlLoaderOptions();
self::assertTrue((bool) ((LIBXML_DTDLOAD | LIBXML_DTDATTR | LIBXML_DTDVALID) & $result)); 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());
}
} }
} }