Permalink
Browse files

Fix issues with getting Xml as SimpleXmlElement and invalid Xml.

Fixes #3855
  • Loading branch information...
1 parent 41e0c52 commit 7334643b55f2b28d26876db733ab153e3942deb5 @markstory markstory committed May 27, 2013
Showing with 24 additions and 6 deletions.
  1. +12 −1 lib/Cake/Test/Case/Utility/XmlTest.php
  2. +12 −5 lib/Cake/Utility/Xml.php
@@ -187,13 +187,24 @@ public static function invalidDataProvider() {
*
* @dataProvider invalidDataProvider
* @expectedException XmlException
- * return void
+ * @return void
*/
public function testBuildInvalidData($value) {
Xml::build($value);
}
/**
+ * Test that building SimpleXmlElement with invalid XML causes the right exception.
+ *
+ * @expectedException XmlException
+ * @return void
+ */
+ public function testBuildInvalidDataSimpleXml() {
+ $input = '<derp';
+ $xml = Xml::build($input, array('return' => 'simplexml'));
+ }
+
+/**
* test build with a single empty tag
*
* return void
View
@@ -131,16 +131,23 @@ protected static function _loadXml($input, $options) {
if ($hasDisable && !$options['loadEntities']) {
libxml_disable_entity_loader(true);
}
- if ($options['return'] === 'simplexml' || $options['return'] === 'simplexmlelement') {
- $xml = new SimpleXMLElement($input, LIBXML_NOCDATA);
- } else {
- $xml = new DOMDocument();
- $xml->loadXML($input);
+ try {
+ if ($options['return'] === 'simplexml' || $options['return'] === 'simplexmlelement') {
+ $xml = new SimpleXMLElement($input, LIBXML_NOCDATA);
+ } else {
+ $xml = new DOMDocument();
+ $xml->loadXML($input);
+ }
+ } catch (Exception $e) {
+ $xml = null;
}
if ($hasDisable && !$options['loadEntities']) {
libxml_disable_entity_loader(false);
}
libxml_use_internal_errors($internalErrors);
+ if ($xml === null) {
+ throw new XmlException(__d('cake_dev', 'Xml cannot be read.'));
+ }
return $xml;
}

0 comments on commit 7334643

Please sign in to comment.