Author: carnold
Date: Tue Aug  5 21:17:10 2008
New Revision: 683102

URL: http://svn.apache.org/viewvc?rev=683102&view=rev
Log:
Bug 37182: Exception in call to toString of message propagates to caller

Modified:
    logging/log4j/trunk/src/changes/changes.xml
    logging/log4j/trunk/src/main/java/org/apache/log4j/or/DefaultRenderer.java
    
logging/log4j/trunk/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java
    
logging/log4j/trunk/src/main/java/org/apache/log4j/or/sax/AttributesRenderer.java
    
logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LoggingEventTest.java

Modified: logging/log4j/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=683102&r1=683101&r2=683102&view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Tue Aug  5 21:17:10 2008
@@ -42,6 +42,7 @@
        <action action="fix" issue="45426">ErrorHandlerTestCase is not run and 
does not pass.</action>
        <action action="fix" issue="45485">Agent.java is sole dependency on 
jmxtools.jar with Java 5+.</action>
        <action action="fix" issue="44517">Eliminate compile dependency on 
non-redistributable JMS reference implementation.</action> 
+       <action action="fix" issue="37182">Exception in call to toString of 
message propagates to caller.</action>
     </release>
   
     <release version="1.2.15" date="2007-08-24" description="SyslogAppender 
enhancements, NTEventLogAppender and Maven build.">

Modified: 
logging/log4j/trunk/src/main/java/org/apache/log4j/or/DefaultRenderer.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/or/DefaultRenderer.java?rev=683102&r1=683101&r2=683102&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/or/DefaultRenderer.java 
(original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/or/DefaultRenderer.java 
Tue Aug  5 21:17:10 2008
@@ -32,7 +32,11 @@
      Render the object passed as parameter by calling its
      <code>toString</code> method.  */
   public
-  String doRender(Object o) {
-    return o.toString();
+  String doRender(final Object o) {
+          try {
+            return o.toString();
+          } catch(Exception ex) {
+            return ex.toString();
+          }
   }
 }  

Modified: 
logging/log4j/trunk/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java?rev=683102&r1=683101&r2=683102&view=diff
==============================================================================
--- 
logging/log4j/trunk/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java 
(original)
+++ 
logging/log4j/trunk/src/main/java/org/apache/log4j/or/ThreadGroupRenderer.java 
Tue Aug  5 21:17:10 2008
@@ -70,8 +70,12 @@
       }
       return sbuf.toString();
     } else {
-      // this is the best we can do
-      return o.toString();
+      try {
+        // this is the best we can do
+        return o.toString();
+      } catch(Exception ex) {
+          return ex.toString();
+      }
     }    
   }
 }  

Modified: 
logging/log4j/trunk/src/main/java/org/apache/log4j/or/sax/AttributesRenderer.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/or/sax/AttributesRenderer.java?rev=683102&r1=683101&r2=683102&view=diff
==============================================================================
--- 
logging/log4j/trunk/src/main/java/org/apache/log4j/or/sax/AttributesRenderer.java
 (original)
+++ 
logging/log4j/trunk/src/main/java/org/apache/log4j/or/sax/AttributesRenderer.java
 Tue Aug  5 21:17:10 2008
@@ -55,7 +55,11 @@
       }
       return sbuf.toString();
     } else {
-      return o.toString();
+      try {
+        return o.toString();
+      } catch(Exception ex) {
+          return ex.toString();
+      }
     }
   }
 }

Modified: 
logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LoggingEventTest.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LoggingEventTest.java?rev=683102&r1=683101&r2=683102&view=diff
==============================================================================
--- 
logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LoggingEventTest.java 
(original)
+++ 
logging/log4j/trunk/tests/src/java/org/apache/log4j/spi/LoggingEventTest.java 
Tue Aug  5 21:17:10 2008
@@ -238,5 +238,35 @@
          }
   }
 
+    /**
+     * Message object that throws a RuntimeException on toString().
+     * See bug 37182.
+     */
+    private static class BadMessage {
+        public BadMessage() {
+        }
+
+        public String toString() {
+            throw new RuntimeException();
+        }
+    }
+
+    /**
+     * Tests that an runtime exception or error during toString
+     * on the message parameter does not propagate to caller.
+     * See bug 37182.
+     */
+    public void testBadMessage() {
+        Category root = Logger.getRootLogger();
+        Priority info = Level.INFO;
+        String catName = Logger.class.toString();
+        BadMessage msg = new BadMessage();
+        LoggingEvent event =
+          new LoggingEvent(
+            catName, root, 0L,  info, msg, null);
+        //  would result in exception in earlier versions
+        event.getRenderedMessage();
+    }
+
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to