diff --git a/src/Composer/Downloader/PearPackageExtractor.php b/src/Composer/Downloader/PearPackageExtractor.php index ff0c90a9f..1106d927f 100644 --- a/src/Composer/Downloader/PearPackageExtractor.php +++ b/src/Composer/Downloader/PearPackageExtractor.php @@ -137,7 +137,7 @@ class PearPackageExtractor private function buildCopyActions($source, array $roles, $vars) { /** @var $package \SimpleXmlElement */ - $package = simplexml_load_file($this->combine($source, 'package.xml')); + $package = simplexml_load_string(file_get_contents($this->combine($source, 'package.xml'))); if (false === $package) { throw new \RuntimeException('Package definition file is not valid.'); } diff --git a/tests/Composer/Test/Downloader/PearPackageExtractorTest.php b/tests/Composer/Test/Downloader/PearPackageExtractorTest.php index c053976d7..5429d109d 100644 --- a/tests/Composer/Test/Downloader/PearPackageExtractorTest.php +++ b/tests/Composer/Test/Downloader/PearPackageExtractorTest.php @@ -18,12 +18,16 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase { public function testShouldExtractPackage_1_0() { + $state = libxml_disable_entity_loader(true); + $extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false); $method = new \ReflectionMethod($extractor, 'buildCopyActions'); $method->setAccessible(true); $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v1.0', array('php' => '/'), array()); + libxml_disable_entity_loader($state); + $expectedFileActions = array( 'Gtk.php' => array( 'from' => 'PEAR_Frontend_Gtk-0.4.0/Gtk.php', @@ -49,12 +53,16 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase public function testShouldExtractPackage_2_0() { + $state = libxml_disable_entity_loader(true); + $extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false); $method = new \ReflectionMethod($extractor, 'buildCopyActions'); $method->setAccessible(true); $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.0', array('php' => '/'), array()); + libxml_disable_entity_loader($state); + $expectedFileActions = array( 'URL.php' => array( 'from' => 'Net_URL-1.0.15/URL.php', @@ -68,12 +76,16 @@ class PearPackageExtractorTest extends \PHPUnit_Framework_TestCase public function testShouldExtractPackage_2_1() { + $state = libxml_disable_entity_loader(true); + $extractor = $this->getMockForAbstractClass('Composer\Downloader\PearPackageExtractor', array(), '', false); $method = new \ReflectionMethod($extractor, 'buildCopyActions'); $method->setAccessible(true); $fileActions = $method->invoke($extractor, __DIR__ . '/Fixtures/Package_v2.1', array('php' => '/', 'script' => '/bin'), array()); + libxml_disable_entity_loader($state); + $expectedFileActions = array( 'php/Zend/Authentication/Storage/StorageInterface.php' => array( 'from' => 'Zend_Authentication-2.0.0beta4/php/Zend/Authentication/Storage/StorageInterface.php',