You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spamassassin.apache.org by mm...@apache.org on 2008/12/10 03:00:42 UTC

svn commit: r724958 - in /spamassassin/trunk/lib/Mail/SpamAssassin: Logger.pm Logger/Stderr.pm

Author: mmartinec
Date: Tue Dec  9 18:00:42 2008
New Revision: 724958

URL: http://svn.apache.org/viewvc?rev=724958&view=rev
Log:
protect logger from being recursively re-entered on warn or die from within logging

Modified:
    spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm
    spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm?rev=724958&r1=724957&r2=724958&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Logger.pm Tue Dec  9 18:00:42 2008
@@ -62,6 +62,7 @@
 
 # global shared object
 our %LOG_SA;
+our $LOG_ENTERED;  # to avoid recursion on die or warn from within logging
 
 # defaults
 $LOG_SA{level} = WARNING;       # log info, warnings and errors
@@ -165,6 +166,9 @@
 		       $caller[0] =~ m#^Mail::SpamAssassin(?:$|::)#);
   }
 
+  return if $LOG_ENTERED;  # avoid recursion on die or warn from within logging
+  $LOG_ENTERED = 1;  # no 'returns' from this point on, must clear the flag
+
   my $message = join(" ", @message);
   $message =~ s/[\r\n]+$//;		# remove any trailing newlines
 
@@ -178,6 +182,7 @@
       $object->log_message($level, $line);
     }
   }
+  $LOG_ENTERED = 0;
 }
 
 =item dbg("facility: message")

Modified: spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm
URL: http://svn.apache.org/viewvc/spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm?rev=724958&r1=724957&r2=724958&view=diff
==============================================================================
--- spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm (original)
+++ spamassassin/trunk/lib/Mail/SpamAssassin/Logger/Stderr.pm Tue Dec  9 18:00:42 2008
@@ -50,6 +50,7 @@
 sub log_message {
   my ($self, $level, $msg) = @_;
 
+  local $SIG{PIPE} = 'IGNORE';  # don't signal on a failed write to a pipe
   print STDERR "[$$] $level: $msg\n"
     or warn "Error writing to log file: $!";
 }