From 4165834f800dbcae058cd43f6dd627292558accf Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 8 Feb 2021 12:10:25 +0300 Subject: [PATCH] pluginhost: catch fatal errors in plugin init --- classes/pluginhost.php | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/classes/pluginhost.php b/classes/pluginhost.php index bcde12551..5df58e5d5 100755 --- a/classes/pluginhost.php +++ b/classes/pluginhost.php @@ -249,23 +249,29 @@ class PluginHost { $this->last_registered = $class; - switch ($kind) { - case $this::KIND_SYSTEM: - if ($this->is_system($plugin)) { - if (!$skip_init) $plugin->init($this); - $this->register_plugin($class, $plugin); - } - break; - case $this::KIND_USER: - if (!$this->is_system($plugin)) { - if (!$skip_init) $plugin->init($this); - $this->register_plugin($class, $plugin); - } - break; - case $this::KIND_ALL: - if (!$skip_init) $plugin->init($this); - $this->register_plugin($class, $plugin); - break; + try { + switch ($kind) { + case $this::KIND_SYSTEM: + if ($this->is_system($plugin)) { + if (!$skip_init) $plugin->init($this); + $this->register_plugin($class, $plugin); + } + break; + case $this::KIND_USER: + if (!$this->is_system($plugin)) { + if (!$skip_init) $plugin->init($this); + $this->register_plugin($class, $plugin); + } + break; + case $this::KIND_ALL: + if (!$skip_init) $plugin->init($this); + $this->register_plugin($class, $plugin); + break; + } + } catch (Exception $ex) { + user_error($ex, E_USER_WARNING); + } catch (Error $err) { + user_error($err, E_USER_WARNING); } } }