Bug 24031: Add safety checks in Koha::Plugins::call
authorJulian Maurice <julian.maurice@biblibre.com>
Fri, 22 May 2020 10:29:11 +0000 (12:29 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 30 Jul 2020 15:30:23 +0000 (17:30 +0200)
- Check that the plugin has the method before calling it
- Call the method in an eval block to prevent fatal errors

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Koha/Plugins.pm

index ae2f2c5..41974e5 100644 (file)
@@ -66,8 +66,14 @@ sub call {
     if (C4::Context->config('enable_plugins')) {
         my @plugins = $class->new({ enable_plugins => 1 })->GetPlugins({ method => $method });
         my @responses;
+        @plugins = grep { $_->can($method) } @plugins;
         foreach my $plugin (@plugins) {
-            my $response = $plugin->$method(@args);
+            my $response = eval { $plugin->$method(@args) };
+            if ($@) {
+                warn sprintf("Plugin error (%s): %s", $plugin->get_metadata->{name}, $@);
+                next;
+            }
+
             push @responses, $response;
         }