diff --git a/admin/classes/local/settings/filesize.php b/admin/classes/local/settings/filesize.php index 3352f1ec375..4af33f5b67a 100644 --- a/admin/classes/local/settings/filesize.php +++ b/admin/classes/local/settings/filesize.php @@ -126,6 +126,7 @@ class filesize extends \admin_setting { if (is_null($bytes)) { return null; } + $bytes = intval($bytes); return self::parse_bytes($bytes); } @@ -145,9 +146,10 @@ class filesize extends \admin_setting { return get_string('errorsetting', 'admin'); } + // Calculate size in bytes, ensuring we don't overflow PHP_INT_MAX. $bytes = $data['v'] * $data['u']; + $result = (is_int($bytes) && $this->config_write($this->name, $bytes)); - $result = $this->config_write($this->name, $bytes); return ($result ? '' : get_string('errorsetting', 'admin')); }