5
5
use PhpOffice \PhpSpreadsheet \Reader \Security \XmlScanner ;
6
6
use PhpOffice \PhpSpreadsheet \Reader \Xls ;
7
7
use PhpOffice \PhpSpreadsheet \Reader \Xlsx ;
8
+ use PhpOffice \PhpSpreadsheet \Reader \Xml ;
8
9
use PHPUnit \Framework \TestCase ;
9
10
10
11
class XmlScannerTest extends TestCase
@@ -14,19 +15,26 @@ class XmlScannerTest extends TestCase
14
15
*
15
16
* @param mixed $filename
16
17
* @param mixed $expectedResult
18
+ * @param $libxmlDisableEntityLoader
17
19
*/
18
- public function testValidXML ($ filename , $ expectedResult )
20
+ public function testValidXML ($ filename , $ expectedResult, $ libxmlDisableEntityLoader )
19
21
{
22
+ libxml_disable_entity_loader ($ libxmlDisableEntityLoader );
23
+
20
24
$ reader = XmlScanner::getInstance (new \PhpOffice \PhpSpreadsheet \Reader \Xml ());
21
25
$ result = $ reader ->scanFile ($ filename );
22
26
self ::assertEquals ($ expectedResult , $ result );
27
+ self ::assertEquals ($ libxmlDisableEntityLoader , libxml_disable_entity_loader ());
23
28
}
24
29
25
30
public function providerValidXML ()
26
31
{
27
32
$ tests = [];
28
33
foreach (glob (__DIR__ . '/../../../data/Reader/Xml/XEETestValid*.xml ' ) as $ file ) {
29
- $ tests [basename ($ file )] = [realpath ($ file ), file_get_contents ($ file )];
34
+ $ filename = realpath ($ file );
35
+ $ expectedResult = file_get_contents ($ file );
36
+ $ tests [basename ($ file ) . '_libxml_entity_loader_disabled ' ] = [$ filename , $ expectedResult , true ];
37
+ $ tests [basename ($ file ) . '_libxml_entity_loader_enabled ' ] = [$ filename , $ expectedResult , false ];
30
38
}
31
39
32
40
return $ tests ;
@@ -36,22 +44,28 @@ public function providerValidXML()
36
44
* @dataProvider providerInvalidXML
37
45
*
38
46
* @param mixed $filename
47
+ * @param $libxmlDisableEntityLoader
39
48
*/
40
- public function testInvalidXML ($ filename )
49
+ public function testInvalidXML ($ filename, $ libxmlDisableEntityLoader )
41
50
{
42
51
$ this ->expectException (\PhpOffice \PhpSpreadsheet \Reader \Exception::class);
43
52
53
+ libxml_disable_entity_loader ($ libxmlDisableEntityLoader );
54
+
44
55
$ reader = XmlScanner::getInstance (new \PhpOffice \PhpSpreadsheet \Reader \Xml ());
45
56
$ expectedResult = 'FAILURE: Should throw an Exception rather than return a value ' ;
46
57
$ result = $ reader ->scanFile ($ filename );
47
58
self ::assertEquals ($ expectedResult , $ result );
59
+ self ::assertEquals ($ libxmlDisableEntityLoader , libxml_disable_entity_loader ());
48
60
}
49
61
50
62
public function providerInvalidXML ()
51
63
{
52
64
$ tests = [];
53
65
foreach (glob (__DIR__ . '/../../../data/Reader/Xml/XEETestInvalidUTF*.xml ' ) as $ file ) {
54
- $ tests [basename ($ file )] = [realpath ($ file )];
66
+ $ filename = realpath ($ file );
67
+ $ tests [basename ($ file ) . '_libxml_entity_loader_disabled ' ] = [$ filename , true ];
68
+ $ tests [basename ($ file ) . '_libxml_entity_loader_enabled ' ] = [$ filename , false ];
55
69
}
56
70
57
71
return $ tests ;
@@ -101,4 +115,26 @@ public function providerValidXMLForCallback()
101
115
102
116
return $ tests ;
103
117
}
118
+
119
+ /**
120
+ * @dataProvider providerLibxmlSettings
121
+ *
122
+ * @param $libxmDisableLoader
123
+ */
124
+ public function testNewInstanceCreationDoesntChangeLibxmlSettings ($ libxmDisableLoader )
125
+ {
126
+ libxml_disable_entity_loader ($ libxmDisableLoader );
127
+
128
+ $ reader = new Xml ();
129
+
130
+ self ::assertEquals ($ libxmDisableLoader , libxml_disable_entity_loader ($ libxmDisableLoader ));
131
+ }
132
+
133
+ public function providerLibxmlSettings ()
134
+ {
135
+ return [
136
+ [true ],
137
+ [false ],
138
+ ];
139
+ }
104
140
}
0 commit comments