Merge pull request #12632 from nupplaphil/bug/more_config
Fix loading empty node.config.php
This commit is contained in:
commit
11558d0cc5
5 changed files with 79 additions and 9 deletions
|
@ -84,7 +84,7 @@ class Addon
|
|||
public static function getAdminList(): array
|
||||
{
|
||||
$addons_admin = [];
|
||||
$addons = DI::config()->get('addons') ?? [];
|
||||
$addons = array_filter(DI::config()->get('addons') ?? []);
|
||||
|
||||
ksort($addons);
|
||||
foreach ($addons as $name => $data) {
|
||||
|
@ -117,7 +117,7 @@ class Addon
|
|||
*/
|
||||
public static function loadAddons()
|
||||
{
|
||||
self::$addons = array_keys(DI::config()->get('addons') ?? []);
|
||||
self::$addons = array_keys(array_filter(DI::config()->get('addons') ?? []));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -192,7 +192,7 @@ class Addon
|
|||
*/
|
||||
public static function reload()
|
||||
{
|
||||
$addons = DI::config()->get('addons') ?? [];
|
||||
$addons = array_filter(DI::config()->get('addons') ?? []);
|
||||
|
||||
foreach ($addons as $name => $data) {
|
||||
$addonname = Strings::sanitizeFilePathItem(trim($name));
|
||||
|
@ -315,7 +315,7 @@ class Addon
|
|||
public static function getVisibleList(): array
|
||||
{
|
||||
$visible_addons = [];
|
||||
$addons = DI::config()->get('addons') ?? [];
|
||||
$addons = array_filter(DI::config()->get('addons') ?? []);
|
||||
|
||||
foreach ($addons as $name => $data) {
|
||||
$visible_addons[] = $name;
|
||||
|
|
|
@ -177,7 +177,7 @@ class ConfigFileManager
|
|||
{
|
||||
$filename = $this->configDir . '/' . self::CONFIG_DATA_FILE;
|
||||
|
||||
if (file_exists($filename)) {
|
||||
if (file_exists($filename) && (filesize($filename) > 0)) {
|
||||
|
||||
// The fallback empty return content
|
||||
$content = '<?php return [];';
|
||||
|
@ -188,10 +188,19 @@ class ConfigFileManager
|
|||
*
|
||||
* 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 {
|
||||
if (flock($configStream, LOCK_SH)) {
|
||||
$content = fread($configStream, filesize($filename));
|
||||
clearstatcache(true, $filename);
|
||||
|
||||
if (($filesize = filesize($filename)) === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$content = fread($configStream, $filesize);
|
||||
if (!$content) {
|
||||
throw new ConfigFileException(sprintf('Couldn\'t read file %s', $filename));
|
||||
}
|
||||
|
|
|
@ -283,7 +283,7 @@ class Cache
|
|||
$keys = array_keys($config[$category]);
|
||||
|
||||
foreach ($keys as $key) {
|
||||
if (!isset($this->config[$category][$key])) {
|
||||
if (!key_exists($key, $this->config[$category] ?? [])) {
|
||||
$return[$category][$key] = $config[$category][$key];
|
||||
}
|
||||
}
|
||||
|
@ -311,6 +311,11 @@ class Cache
|
|||
if (is_array($cache->config[$category])) {
|
||||
$keys = array_keys($cache->config[$category]);
|
||||
|
||||
if (is_null($newConfig[$category] ?? null)) {
|
||||
$newConfig[$category] = [];
|
||||
$newSource[$category] = [];
|
||||
}
|
||||
|
||||
foreach ($keys as $key) {
|
||||
$newConfig[$category][$key] = $cache->config[$category][$key];
|
||||
$newSource[$category][$key] = $cache->source[$category][$key];
|
||||
|
|
|
@ -40,6 +40,7 @@ class CacheTest extends MockedTest
|
|||
'int' => 235,
|
||||
'dec' => 2.456,
|
||||
'array' => ['1', 2, '3', true, false],
|
||||
'null' => null,
|
||||
],
|
||||
'config' => [
|
||||
'a' => 'value',
|
||||
|
@ -503,6 +504,24 @@ class CacheTest extends MockedTest
|
|||
],
|
||||
],
|
||||
],
|
||||
/** @see https://github.com/friendica/friendica/issues/12486#issuecomment-1374609349 */
|
||||
'test_with_null' => [
|
||||
'data' => [
|
||||
'test_with_null' => null,
|
||||
'config' => [
|
||||
'register_policy' => 2,
|
||||
'register_text' => '',
|
||||
'sitename' => 'Friendica Social Network23',
|
||||
'hostname' => 'friendica.local',
|
||||
'private_addons' => false,
|
||||
],
|
||||
'system' => [
|
||||
'dbclean_expire_conversation' => 90,
|
||||
],
|
||||
],
|
||||
'cat' => 'test_with_null',
|
||||
'assertion' => null,
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -511,10 +530,28 @@ class CacheTest extends MockedTest
|
|||
*
|
||||
* @dataProvider dataTestCat
|
||||
*/
|
||||
public function testGetCategory(array $data, string $category, array $assertion)
|
||||
public function testGetCategory($data, string $category, $assertion)
|
||||
{
|
||||
$cache = new Cache($data);
|
||||
|
||||
self::assertEquals($assertion, $cache->get($category));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that the cache can get merged with different categories
|
||||
*
|
||||
* @dataProvider dataTestCat
|
||||
*/
|
||||
public function testCatMerge($data, string $category)
|
||||
{
|
||||
$cache = new Cache($data);
|
||||
|
||||
$newCache = $cache->merge(new Cache([
|
||||
$category => [
|
||||
'new_key' => 'new_value',
|
||||
],
|
||||
]));
|
||||
|
||||
self::assertEquals('new_value', $newCache->get($category, 'new_key'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -511,4 +511,23 @@ class ConfigFileManagerTest extends MockedTest
|
|||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue