Fix loading empty node.config.php

This commit is contained in:
Philipp Holzer 2023-01-08 02:04:25 +01:00
parent 91bd03a75f
commit 0429a4e429
Signed by: nupplaPhil
GPG key ID: 24A7501396EB5432
2 changed files with 28 additions and 2 deletions

View file

@ -177,7 +177,7 @@ class ConfigFileManager
{ {
$filename = $this->configDir . '/' . self::CONFIG_DATA_FILE; $filename = $this->configDir . '/' . self::CONFIG_DATA_FILE;
if (file_exists($filename)) { if (file_exists($filename) && (filesize($filename) > 0)) {
// The fallback empty return content // The fallback empty return content
$content = '<?php return [];'; $content = '<?php return [];';
@ -188,9 +188,16 @@ class ConfigFileManager
* *
* Any exclusive locking (LOCK_EX) would need to wait until all LOCK_SHs are unlocked * Any exclusive locking (LOCK_EX) would need to wait until all LOCK_SHs are unlocked
*/ */
$configStream = fopen($filename, 'r'); if (($configStream = @fopen($filename, 'r')) === false) {
throw new ConfigFileException(sprintf('Cannot open file "%s" in mode r', $filename));
}
try { try {
if (flock($configStream, LOCK_SH)) { if (flock($configStream, LOCK_SH)) {
if (($filesize = filesize($filename)) === 0) {
return;
}
$content = fread($configStream, filesize($filename)); $content = fread($configStream, filesize($filename));
if (!$content) { if (!$content) {
throw new ConfigFileException(sprintf('Couldn\'t read file %s', $filename)); throw new ConfigFileException(sprintf('Couldn\'t read file %s', $filename));

View file

@ -511,4 +511,23 @@ class ConfigFileManagerTest extends MockedTest
self::assertNull($configCache->get('system', 'default_timezone')); self::assertNull($configCache->get('system', 'default_timezone'));
} }
/**
* Test for empty node.config.php
*/
public function testEmptyFile()
{
$this->delConfigFile('node.config.php');
vfsStream::newFile('node.config.php')
->at($this->root->getChild('config'))
->setContent('');
$configFileManager = (new Config())->createConfigFileManager($this->root->url());
$configCache = new Cache();
$configFileManager->setupCache($configCache);
self::assertEquals(1,1);
}
} }