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-15 14:10:08 +00:00
parent 076379a485
commit 70f7b59c3c
2 changed files with 5 additions and 2 deletions
+1 -1
View File
@@ -1550,7 +1550,7 @@ class core_plugin_manager {
$provider = \core\update\checker::instance();
if (!$provider->enabled() or during_initial_install()) {
if (!$provider->enabled() || $component === '' || during_initial_install()) {
return null;
}
+4 -1
View File
@@ -440,8 +440,11 @@ class checker {
$pluginman = \core_plugin_manager::instance();
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) {
if (!$plugin->is_standard()) {
if ($plugin->component !== '' && !$plugin->is_standard()) {
$this->currentplugins[$plugin->component] = $plugin->versiondisk;
}
}