MDL-80516 core: more robust plugin update component checking.

Occurs when a plugin in incorrectly removed (via file system only,
rather than following proper uninstall process), and also contains
it's own sub-plugins.

In the above scenario, the update would request and receive back a
response for a plugin whose name was comprised of an empty string,
subsequently causing errors when processing said response.
This commit is contained in:
Paul Holden 2024-01-11 20:45:40 +00:00
parent 580c009cac
commit 26bc1fa27f
No known key found for this signature in database
GPG Key ID: A81A96D6045F6164
2 changed files with 5 additions and 2 deletions

View File

@ -1550,7 +1550,7 @@ class core_plugin_manager {
$provider = \core\update\checker::instance(); $provider = \core\update\checker::instance();
if (!$provider->enabled() or during_initial_install()) { if (!$provider->enabled() || $component === '' || during_initial_install()) {
return null; return null;
} }

View File

@ -440,8 +440,11 @@ class checker {
$pluginman = \core_plugin_manager::instance(); $pluginman = \core_plugin_manager::instance();
foreach ($pluginman->get_plugins() as $type => $plugins) { foreach ($pluginman->get_plugins() as $type => $plugins) {
// Iterate over installed plugins and determine which are non-standard and eligible for update checks. Note that we
// disregard empty component names here, to ensure we only request valid data from the update site (in the case of an
// improperly removed plugin containing sub-plugins, we would get an empty value here for each sub-plugin).
foreach ($plugins as $plugin) { foreach ($plugins as $plugin) {
if (!$plugin->is_standard()) { if ($plugin->component !== '' && !$plugin->is_standard()) {
$this->currentplugins[$plugin->component] = $plugin->versiondisk; $this->currentplugins[$plugin->component] = $plugin->versiondisk;
} }
} }