refined previous commit

This commit is contained in:
Fabien Potencier 2012-08-26 18:38:30 +02:00
parent a2a6cdca8d
commit c896d71594
2 changed files with 14 additions and 16 deletions

View File

@ -54,15 +54,24 @@ class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, Dec
*/
public function decode($data, $format)
{
$this->assertNoCustomDocType($data);
$internalErrors = libxml_use_internal_errors(true);
$disableEntities = libxml_disable_entity_loader(true);
libxml_clear_errors();
$xml = simplexml_load_string($data);
$dom = new \DOMDocument();
$dom->loadXML($data);
libxml_use_internal_errors($internalErrors);
libxml_disable_entity_loader($disableEntities);
foreach ($dom->childNodes as $child) {
if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
throw new UnexpectedValueException('Document types are not allowed.');
}
}
$xml = simplexml_import_dom($dom);
if ($error = libxml_get_last_error()) {
throw new UnexpectedValueException($error->message);
}
@ -291,17 +300,6 @@ class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, Dec
throw new UnexpectedValueException('An unexpected value could not be serialized: '.var_export($data, true));
}
private function assertNoCustomDocType($data)
{
$dom = new \DOMDocument;
$dom->loadXML($data);
foreach ($dom->childNodes as $child) {
if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
throw new \InvalidArgumentException('Document types are not allowed.');
}
}
}
/**
* Selects the type of node to create and appends it to the parent.
*

View File

@ -54,7 +54,7 @@ class XmlEncoderTest extends \PHPUnit_Framework_TestCase
}
/**
* @expectedException \InvalidArgumentException
* @expectedException UnexpectedValueException
* @expectedExceptionMessage Document types are not allowed.
*/
public function testDocTypeIsNotAllowed()
@ -255,8 +255,8 @@ class XmlEncoderTest extends \PHPUnit_Framework_TestCase
} catch (\Exception $e) {
chdir($oldCwd);
if (!$e instanceof \InvalidArgumentException) {
$this->fail('Expected InvalidArgumentException');
if (!$e instanceof UnexpectedValueException) {
$this->fail('Expected UnexpectedValueException');
}
}
}