You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by jm...@apache.org on 2007/10/15 12:52:19 UTC

svn commit: r584726 - /spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm

Author: jm
Date: Mon Oct 15 03:52:09 2007
New Revision: 584726

URL: http://svn.apache.org/viewvc?rev=584726&view=rev
Log:
bug 5687:  fix bug where duplicate loadplugin line results in eval rule method registered with invalid $self object

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm?rev=584726&r1=584725&r2=584726&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/PluginHandler.pm Mon Oct 15 03:52:09 2007
@@ -77,6 +77,16 @@
 sub load_plugin {
   my ($self, $package, $path, $silent) = @_;
 
+  # Don't load the same plugin twice!
+  # Do this *before* calling ->new(), otherwise eval rules will be
+  # registered on a nonexistent object
+  foreach my $old_plugin (@{$self->{plugins}}) {
+    if (ref($old_plugin) eq $package) {
+      dbg("plugin: did not register $package, already registered");
+      return;
+    }
+  }
+
   my $ret;
   if ($path) {
     # bug 3717:
@@ -119,14 +129,6 @@
 
   if ($@ || !$plugin) {
     warn "plugin: failed to create instance of plugin $package: $@\n";
-  }
-
-  # Don't load the same plugin twice!
-  foreach my $old_plugin (@{$self->{plugins}}) {
-    if (ref($old_plugin) eq ref($plugin)) {
-      dbg("plugin: did not register $plugin, already registered");
-      return;
-    }
   }
 
   if ($plugin) {