From ae0685a3142a2c58866f6dcde4145258e673d0c1 Mon Sep 17 00:00:00 2001 From: stealth35 Date: Fri, 7 Oct 2011 18:30:56 +0200 Subject: [PATCH] [Translation] Loader should only load local files --- .../Component/Translation/Loader/CsvFileLoader.php | 4 ++++ .../Component/Translation/Loader/PhpFileLoader.php | 4 ++++ .../Component/Translation/Loader/XliffFileLoader.php | 4 ++++ .../Component/Translation/Loader/CsvFileLoaderTest.php | 10 ++++++++++ .../Component/Translation/Loader/PhpFileLoaderTest.php | 10 ++++++++++ .../Translation/Loader/XliffFileLoaderTest.php | 10 ++++++++++ 6 files changed, 42 insertions(+) diff --git a/src/Symfony/Component/Translation/Loader/CsvFileLoader.php b/src/Symfony/Component/Translation/Loader/CsvFileLoader.php index 84d9ce5503..1e9185a759 100644 --- a/src/Symfony/Component/Translation/Loader/CsvFileLoader.php +++ b/src/Symfony/Component/Translation/Loader/CsvFileLoader.php @@ -35,6 +35,10 @@ class CsvFileLoader extends ArrayLoader implements LoaderInterface { $messages = array(); + if (!stream_is_local($resource)) { + throw new \InvalidArgumentException(sprintf('This is not a local file "%s".', $resource)); + } + try { $file = new \SplFileObject($resource, 'rb'); } catch(\RuntimeException $e) { diff --git a/src/Symfony/Component/Translation/Loader/PhpFileLoader.php b/src/Symfony/Component/Translation/Loader/PhpFileLoader.php index 0be1c52635..c80d938a8a 100644 --- a/src/Symfony/Component/Translation/Loader/PhpFileLoader.php +++ b/src/Symfony/Component/Translation/Loader/PhpFileLoader.php @@ -29,6 +29,10 @@ class PhpFileLoader extends ArrayLoader implements LoaderInterface */ public function load($resource, $locale, $domain = 'messages') { + if (!stream_is_local($resource)) { + throw new \InvalidArgumentException(sprintf('This is not a local file "%s".', $resource)); + } + $messages = require($resource); $catalogue = parent::load($messages, $locale, $domain); diff --git a/src/Symfony/Component/Translation/Loader/XliffFileLoader.php b/src/Symfony/Component/Translation/Loader/XliffFileLoader.php index 31f8c0437e..8fc7b3a868 100644 --- a/src/Symfony/Component/Translation/Loader/XliffFileLoader.php +++ b/src/Symfony/Component/Translation/Loader/XliffFileLoader.php @@ -30,6 +30,10 @@ class XliffFileLoader implements LoaderInterface */ public function load($resource, $locale, $domain = 'messages') { + if (!stream_is_local($resource)) { + throw new \InvalidArgumentException(sprintf('This is not a local file "%s".', $resource)); + } + $xml = $this->parseFile($resource); $xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:1.2'); diff --git a/tests/Symfony/Tests/Component/Translation/Loader/CsvFileLoaderTest.php b/tests/Symfony/Tests/Component/Translation/Loader/CsvFileLoaderTest.php index e6724a87f7..94f348e385 100644 --- a/tests/Symfony/Tests/Component/Translation/Loader/CsvFileLoaderTest.php +++ b/tests/Symfony/Tests/Component/Translation/Loader/CsvFileLoaderTest.php @@ -47,4 +47,14 @@ class CsvFileLoaderTest extends \PHPUnit_Framework_TestCase $resource = __DIR__.'/../fixtures/not-exists.csv'; $loader->load($resource, 'en', 'domain1'); } + + /** + * @expectedException \InvalidArgumentException + */ + public function testLoadThrowsAnExceptionIfFileNotLocal() + { + $loader = new CsvFileLoader(); + $resource = 'http://example.com/resources.csv'; + $loader->load($resource, 'en', 'domain1'); + } } diff --git a/tests/Symfony/Tests/Component/Translation/Loader/PhpFileLoaderTest.php b/tests/Symfony/Tests/Component/Translation/Loader/PhpFileLoaderTest.php index 327800e297..1515be82e2 100644 --- a/tests/Symfony/Tests/Component/Translation/Loader/PhpFileLoaderTest.php +++ b/tests/Symfony/Tests/Component/Translation/Loader/PhpFileLoaderTest.php @@ -26,4 +26,14 @@ class PhpFileLoaderTest extends \PHPUnit_Framework_TestCase $this->assertEquals('en', $catalogue->getLocale()); $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources()); } + + /** + * @expectedException \InvalidArgumentException + */ + public function testLoadThrowsAnExceptionIfFileNotLocal() + { + $loader = new PhpFileLoader(); + $resource = 'http://example.com/resources.php'; + $loader->load($resource, 'en', 'domain1'); + } } diff --git a/tests/Symfony/Tests/Component/Translation/Loader/XliffFileLoaderTest.php b/tests/Symfony/Tests/Component/Translation/Loader/XliffFileLoaderTest.php index f9b8a74835..71b6d96fd5 100644 --- a/tests/Symfony/Tests/Component/Translation/Loader/XliffFileLoaderTest.php +++ b/tests/Symfony/Tests/Component/Translation/Loader/XliffFileLoaderTest.php @@ -44,4 +44,14 @@ class XliffFileLoaderTest extends \PHPUnit_Framework_TestCase $loader = new XliffFileLoader(); $catalogue = $loader->load(__DIR__.'/../fixtures/non-valid.xliff', 'en', 'domain1'); } + + /** + * @expectedException \InvalidArgumentException + */ + public function testLoadThrowsAnExceptionIfFileNotLocal() + { + $loader = new XliffFileLoader(); + $resource = 'http://example.com/resources.xliff'; + $loader->load($resource, 'en', 'domain1'); + } }