summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2017-07-13 22:31:07 +0200
committerMorris Jobke <hey@morrisjobke.de>2017-07-19 00:10:46 +0200
commit2ebafb06fdef6aad4bc32316ece14faa60f9e9c4 (patch)
treed74e544be9826b914de1458a99027cfd52a097a4
parent1f1504e071d38dffd274cd9b4123d2093a6beb3e (diff)
downloadnextcloud-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.php15
-rw-r--r--lib/private/TemplateLayout.php3
-rw-r--r--tests/lib/Template/JSCombinerTest.php25
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';