diff options
author | Morris Jobke <hey@morrisjobke.de> | 2017-07-13 22:31:07 +0200 |
---|---|---|
committer | Morris Jobke <hey@morrisjobke.de> | 2017-07-19 00:10:46 +0200 |
commit | 2ebafb06fdef6aad4bc32316ece14faa60f9e9c4 (patch) | |
tree | d74e544be9826b914de1458a99027cfd52a097a4 | |
parent | 1f1504e071d38dffd274cd9b4123d2093a6beb3e (diff) | |
download | nextcloud-server-2ebafb06fdef6aad4bc32316ece14faa60f9e9c4.tar.gz nextcloud-server-2ebafb06fdef6aad4bc32316ece14faa60f9e9c4.zip |
Properly handle if the deps file if for some reason empty
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
-rw-r--r-- | lib/private/Template/JSCombiner.php | 15 | ||||
-rw-r--r-- | lib/private/TemplateLayout.php | 3 | ||||
-rw-r--r-- | tests/lib/Template/JSCombinerTest.php | 25 |
3 files changed, 40 insertions, 3 deletions
diff --git a/lib/private/Template/JSCombiner.php b/lib/private/Template/JSCombiner.php index 8254174bfc0..8a9e7e747e0 100644 --- a/lib/private/Template/JSCombiner.php +++ b/lib/private/Template/JSCombiner.php @@ -28,6 +28,7 @@ use OCP\Files\IAppData; use OCP\Files\NotFoundException; use OCP\Files\NotPermittedException; use OCP\Files\SimpleFS\ISimpleFolder; +use OCP\ILogger; use OCP\IURLGenerator; class JSCombiner { @@ -44,20 +45,26 @@ class JSCombiner { /** @var SystemConfig */ protected $config; + /** @var ILogger */ + protected $logger; + /** * @param IAppData $appData * @param IURLGenerator $urlGenerator * @param ICache $depsCache * @param SystemConfig $config + * @param ILogger $logger */ public function __construct(IAppData $appData, IURLGenerator $urlGenerator, ICache $depsCache, - SystemConfig $config) { + SystemConfig $config, + ILogger $logger) { $this->appData = $appData; $this->urlGenerator = $urlGenerator; $this->depsCache = $depsCache; $this->config = $config; + $this->logger = $logger; } /** @@ -102,6 +109,12 @@ class JSCombiner { $depFile = $folder->getFile($fileName); $deps = $depFile->getContent(); } + // check again + if ($deps === null || $deps === '') { + $this->logger->info('JSCombiner: deps file empty: ' . $fileName); + return false; + } + $deps = json_decode($deps, true); foreach ($deps as $file=>$mtime) { diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index f7bb23cd3de..9e9ec709cf5 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -243,7 +243,8 @@ class TemplateLayout extends \OC_Template { \OC::$server->getAppDataDir('js'), \OC::$server->getURLGenerator(), \OC::$server->getMemCacheFactory()->create('JS'), - \OC::$server->getSystemConfig() + \OC::$server->getSystemConfig(), + \OC::$server->getLogger() ) ); $locator->find($scripts); diff --git a/tests/lib/Template/JSCombinerTest.php b/tests/lib/Template/JSCombinerTest.php index 89bb13338c8..d6583d4a450 100644 --- a/tests/lib/Template/JSCombinerTest.php +++ b/tests/lib/Template/JSCombinerTest.php @@ -31,6 +31,7 @@ use OCP\Files\NotPermittedException; use OCP\Files\SimpleFS\ISimpleFile; use OCP\Files\SimpleFS\ISimpleFolder; use OCP\ICache; +use OCP\ILogger; use OCP\IURLGenerator; class JSCombinerTest extends \Test\TestCase { @@ -44,6 +45,8 @@ class JSCombinerTest extends \Test\TestCase { protected $depsCache; /** @var JSCombiner */ protected $jsCombiner; + /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ + protected $logger; protected function setUp() { parent::setUp(); @@ -52,11 +55,14 @@ class JSCombinerTest extends \Test\TestCase { $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->config = $this->createMock(SystemConfig::class); $this->depsCache = $this->createMock(ICache::class); + $this->logger = $this->createMock(ILogger::class); $this->jsCombiner = new JSCombiner( $this->appData, $this->urlGenerator, $this->depsCache, - $this->config); + $this->config, + $this->logger + ); } public function testProcessDebugMode() { @@ -284,6 +290,23 @@ class JSCombinerTest extends \Test\TestCase { $this->assertFalse($actual); } + public function testIsCachedWithoutContent() { + $fileName = 'combine.json'; + $folder = $this->createMock(ISimpleFolder::class); + $file = $this->createMock(ISimpleFile::class); + $folder->method('getFile') + ->with('combine.js.deps') + ->willReturn($file); + $file->expects($this->once()) + ->method('getContent') + ->willReturn(''); + $this->logger->expects($this->once()) + ->method('info') + ->with('JSCombiner: deps file empty: combine.js.deps'); + $actual = self::invokePrivate($this->jsCombiner, 'isCached', [$fileName, $folder]); + $this->assertFalse($actual); + } + public function testCacheNoFile() { $fileName = 'combine.js'; |