handle undefined global, fixes #1544

This commit is contained in:
El RIDO 2025-05-18 21:15:39 +02:00
parent 6347b6193e
commit c08a792f01
No known key found for this signature in database
GPG key ID: 0F5C940A6BD81F92
3 changed files with 13 additions and 5 deletions

View file

@ -5,6 +5,8 @@
* CHANGED: Passing large data structures by reference to reduce memory consumption (#858)
* CHANGED: Removed use of ctype functions and polyfill library for ctype
* CHANGED: Upgrading libraries to: DOMpurify 3.2.5, ip-lib 1.20.0
* FIXED: Bump zlib library suffix, ensuring cache refresh for WASM streaming change
* FIXED: Handle undefined globals in file based persisted values (#1544)
## 1.7.6 (2025-02-01)
* ADDED: Ability to copy the paste by clicking the copy icon button or using the keyboard shortcut ctrl+c/cmd+c (#1390 & #12)

View file

@ -276,7 +276,7 @@ class Filesystem extends AbstractData
case 'purge_limiter':
return $this->_storeString(
$this->_path . DIRECTORY_SEPARATOR . 'purge_limiter.php',
'<?php' . PHP_EOL . '$GLOBALS[\'purge_limiter\'] = ' . $value . ';'
'<?php' . PHP_EOL . '$GLOBALS[\'purge_limiter\'] = ' . var_export($value, true) . ';'
);
case 'salt':
return $this->_storeString(
@ -308,8 +308,10 @@ class Filesystem extends AbstractData
$file = $this->_path . DIRECTORY_SEPARATOR . 'purge_limiter.php';
if (is_readable($file)) {
require $file;
if (array_key_exists('purge_limiter', $GLOBALS)) {
return $GLOBALS['purge_limiter'];
}
}
break;
case 'salt':
$file = $this->_path . DIRECTORY_SEPARATOR . 'salt.php';
@ -324,11 +326,13 @@ class Filesystem extends AbstractData
$file = $this->_path . DIRECTORY_SEPARATOR . 'traffic_limiter.php';
if (is_readable($file)) {
require $file;
if (array_key_exists('traffic_limiter', $GLOBALS)) {
$this->_last_cache = $GLOBALS['traffic_limiter'];
if (array_key_exists($key, $this->_last_cache)) {
return $this->_last_cache[$key];
}
}
}
break;
}
return '';

View file

@ -185,7 +185,9 @@ class FilesystemTest extends TestCase
foreach (array('purge_limiter', 'salt', 'traffic_limiter') as $namespace) {
file_put_contents($this->_invalidPath . DIRECTORY_SEPARATOR . $namespace . '.php', 'invalid content');
$model = new Filesystem(array('dir' => $this->_invalidPath));
ob_start(); // hide "invalid content", when file gets included
$this->assertEquals($model->getValue($namespace), '', 'empty default value returned, invalid content ignored');
ob_end_clean();
$this->assertTrue($model->setValue(VALID, $namespace), 'setting valid value');
$this->assertEquals($model->getValue($namespace), VALID, 'valid value returned');
}