mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-21 00:07:30 +00:00
PluginManager: Prevent infinite recursion in loadPlugins()
if a plugin calls loadPlugins(server->getPluginPath()) during its onLoad(), and it itself is in that plugin path, an infinite recursion will occur.
This commit is contained in:
parent
620874d902
commit
e2275cc8ec
@ -79,6 +79,8 @@ class PluginManager{
|
||||
/** @var Plugin[] */
|
||||
protected $enabledPlugins = [];
|
||||
|
||||
private bool $loadPluginsGuard = false;
|
||||
|
||||
/**
|
||||
* @var PluginLoader[]
|
||||
* @phpstan-var array<class-string<PluginLoader>, PluginLoader>
|
||||
@ -320,6 +322,11 @@ class PluginManager{
|
||||
* @return Plugin[]
|
||||
*/
|
||||
public function loadPlugins(string $path) : array{
|
||||
if($this->loadPluginsGuard){
|
||||
throw new \LogicException(__METHOD__ . "() cannot be called from within itself");
|
||||
}
|
||||
$this->loadPluginsGuard = true;
|
||||
|
||||
$triage = new PluginLoadTriage();
|
||||
$this->triagePlugins($path, $triage);
|
||||
|
||||
@ -404,6 +411,7 @@ class PluginManager{
|
||||
}
|
||||
}
|
||||
|
||||
$this->loadPluginsGuard = false;
|
||||
return $loadedPlugins;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user