com php-src: [libxml] Unit test for libxml_disable_entity _loader(): ext/libxml/tests/libxml_disable_entity _loader.phpt
ext/libxml/tests/libxml_disable_entity _loader_payload.txt
| From: | Scott MacVicar | Date: | Mon, 17 Feb 2014 06:34:52 +0000 |
| Subject: | com php-src: [libxml] Unit test for libxml_disable_entity _loader(): ext/libxml/tests/libxml_disable_entity _loader.phpt ext/libxml/tests/libxml_disable_entity _loader_payload.txt |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-76031@lists.php.net to get a copy of this message | ||
Commit: 1f3af9cd2152f08bb52bb69d035a4aefdd9d13bf
Author: Scott MacVicar <scottmac@php.net> Sun, 5 Jan 2014 02:11:05 -0800
Parents: e5ec5fc9cc018731294ef5d1b7185c461d03f885
Branches: PHP-5.6
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=1f3af9cd2152f08bb52bb69d035a4aefdd9d13bf
Log:
[libxml] Unit test for libxml_disable_entity_loader()
Summary:
Test to make sure libxml_disable_entity_loader() is behaving.
Changed paths:
A ext/libxml/tests/libxml_disable_entity_loader.phpt
A ext/libxml/tests/libxml_disable_entity_loader_payload.txt
Diff:
diff --git a/ext/libxml/tests/libxml_disable_entity_loader.phpt
b/ext/libxml/tests/libxml_disable_entity_loader.phpt
new file mode 100644
index 0000000..6477543
--- /dev/null
+++ b/ext/libxml/tests/libxml_disable_entity_loader.phpt
@@ -0,0 +1,41 @@
+--TEST--
+libxml_disable_entity_loader()
+--SKIPIF--
+<?php if (!extension_loaded('libxml') || !extension_loaded('dom') ||
defined('PHP_WINDOWS_VERSION_MAJOR')) die('skip'); ?>
+--FILE--
+<?php
+
+$xml = <<<EOT
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE test [<!ENTITY xxe SYSTEM "XXE_URI">]>
+<foo>&xxe;</foo>
+EOT;
+
+$xml = str_replace('XXE_URI', __DIR__ .
'/libxml_disable_entity_loader_payload.txt', $xml);
+
+function parseXML($xml) {
+ $doc = new DOMDocument();
+ $doc->resolveExternals = true;
+ $doc->substituteEntities = true;
+ $doc->validateOnParse = false;
+ $doc->loadXML($xml, 0);
+ return $doc->saveXML();
+}
+
+var_dump(strpos(parseXML($xml), 'SECRET_DATA') !== false);
+var_dump(libxml_disable_entity_loader(true));
+var_dump(strpos(parseXML($xml), 'SECRET_DATA') === false);
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(true)
+bool(false)
+
+Warning: DOMDocument::loadXML(): I/O warning : failed to load external entity "%s" in %s
on line %d
+
+Warning: DOMDocument::loadXML(): Failure to process entity xxe in Entity, line: %d in %s on line %d
+
+Warning: DOMDocument::loadXML(): Entity 'xxe' not defined in Entity, line: %d in %s on
line %d
+bool(true)
+Done
diff --git a/ext/libxml/tests/libxml_disable_entity_loader_payload.txt
b/ext/libxml/tests/libxml_disable_entity_loader_payload.txt
new file mode 100644
index 0000000..3b8a43c
--- /dev/null
+++ b/ext/libxml/tests/libxml_disable_entity_loader_payload.txt
@@ -0,0 +1 @@
+SECRET_DATA
\ No newline at end of file