diff --git a/src/Symfony/Component/Translation/Loader/MoFileLoader.php b/src/Symfony/Component/Translation/Loader/MoFileLoader.php index 95a1363fa4..3f0dd921ee 100644 --- a/src/Symfony/Component/Translation/Loader/MoFileLoader.php +++ b/src/Symfony/Component/Translation/Loader/MoFileLoader.php @@ -137,6 +137,10 @@ class MoFileLoader extends ArrayLoader implements LoaderInterface $length = $this->readLong($stream, $isBigEndian); $offset = $this->readLong($stream, $isBigEndian); + if ($length < 1) { + continue; + } + fseek($stream, $offset); $translated = fread($stream, $length); diff --git a/src/Symfony/Component/Translation/Tests/Loader/MoFileLoaderTest.php b/src/Symfony/Component/Translation/Tests/Loader/MoFileLoaderTest.php index d568e4530b..34078d0a9e 100644 --- a/src/Symfony/Component/Translation/Tests/Loader/MoFileLoaderTest.php +++ b/src/Symfony/Component/Translation/Tests/Loader/MoFileLoaderTest.php @@ -57,4 +57,15 @@ class MoFileLoaderTest extends \PHPUnit_Framework_TestCase $resource = __DIR__.'/../fixtures/empty.mo'; $loader->load($resource, 'en', 'domain1'); } + + public function testLoadEmptyTranslation() + { + $loader = new MoFileLoader(); + $resource = __DIR__.'/../fixtures/empty-translation.mo'; + $catalogue = $loader->load($resource, 'en', 'message'); + + $this->assertEquals(array(), $catalogue->all('message')); + $this->assertEquals('en', $catalogue->getLocale()); + $this->assertEquals(array(new FileResource($resource)), $catalogue->getResources()); + } } diff --git a/src/Symfony/Component/Translation/Tests/fixtures/empty-translation.mo b/src/Symfony/Component/Translation/Tests/fixtures/empty-translation.mo new file mode 100644 index 0000000000..ed01000c9b Binary files /dev/null and b/src/Symfony/Component/Translation/Tests/fixtures/empty-translation.mo differ