diff --git a/src/PhpSpreadsheet/Reader/Security/XmlScanner.php b/src/PhpSpreadsheet/Reader/Security/XmlScanner.php
index 3946ed00e..362a70c12 100644
--- a/src/PhpSpreadsheet/Reader/Security/XmlScanner.php
+++ b/src/PhpSpreadsheet/Reader/Security/XmlScanner.php
@@ -51,8 +51,8 @@ class XmlScanner
private function findCharSet(string $xml): string
{
$patterns = [
- '/encoding="([^"]*]?)"/',
- "/encoding='([^']*?)'/",
+ '/encoding\\s*=\\s*"([^"]*]?)"/',
+ "/encoding\\s*=\\s*'([^']*?)'/",
];
foreach ($patterns as $pattern) {
diff --git a/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php b/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php
index 982c557ec..aa214b4a0 100644
--- a/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php
+++ b/tests/PhpSpreadsheetTests/Reader/Security/XmlScannerTest.php
@@ -131,4 +131,20 @@ class XmlScannerTest extends TestCase
$output = $scanner->scan($input = 'bar');
self::assertSame($input, $output);
}
+
+ public function testUtf7Whitespace(): void
+ {
+ $this->expectException(ReaderException::class);
+ $this->expectExceptionMessage('Double-encoded');
+ $reader = new Xlsx();
+ $reader->load('tests/data/Reader/XLSX/utf7white.dontuse');
+ }
+
+ public function testUtf8Entity(): void
+ {
+ $this->expectException(ReaderException::class);
+ $this->expectExceptionMessage('Detected use of ENTITY');
+ $reader = new Xlsx();
+ $reader->load('tests/data/Reader/XLSX/utf8entity.dontuse');
+ }
}
diff --git a/tests/data/Reader/XLSX/utf7white.dontuse b/tests/data/Reader/XLSX/utf7white.dontuse
new file mode 100644
index 000000000..24e9b1f5c
Binary files /dev/null and b/tests/data/Reader/XLSX/utf7white.dontuse differ
diff --git a/tests/data/Reader/XLSX/utf8entity.dontuse b/tests/data/Reader/XLSX/utf8entity.dontuse
new file mode 100644
index 000000000..d69097772
Binary files /dev/null and b/tests/data/Reader/XLSX/utf8entity.dontuse differ
diff --git a/tests/data/Reader/Xml/XEETestInvalidUTF-7-whitespace.xml b/tests/data/Reader/Xml/XEETestInvalidUTF-7-whitespace.xml
new file mode 100644
index 000000000..143591d74
--- /dev/null
+++ b/tests/data/Reader/Xml/XEETestInvalidUTF-7-whitespace.xml
@@ -0,0 +1,2 @@
+
+ +ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-toreplace+ACA-+ACI-xxe+AF8-test+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-sst+ACA-xmlns+AD0-+ACI-http://schemas.openxmlformats.org/spreadsheetml/2006/main+ACI-+ACA-count+AD0-+ACI-2+ACI-+ACA-uniqueCount+AD0-+ACI-1+ACI-+AD4-+ADw-si+AD4-+ADw-t+AD4-+ACY-toreplace+ADs-+ADw-/t+AD4-+ADw-/si+AD4-+ADw-/sst+AD4-
diff --git a/tests/data/Reader/Xml/XEETestValidUTF-8-whitespace.xml b/tests/data/Reader/Xml/XEETestValidUTF-8-whitespace.xml
new file mode 100644
index 000000000..6dc0e5c3f
--- /dev/null
+++ b/tests/data/Reader/Xml/XEETestValidUTF-8-whitespace.xml
@@ -0,0 +1,4 @@
+
+
+ test: Valid
+