You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2007/08/23 01:54:50 UTC

svn commit: r568774 - in /logging/log4j/trunk: src/changes/changes.xml src/main/java/org/apache/log4j/xml/XMLLayout.java tests/src/java/org/apache/log4j/xml/XMLLayoutTest.java

Author: carnold
Date: Wed Aug 22 16:54:50 2007
New Revision: 568774

URL: http://svn.apache.org/viewvc?rev=568774&view=rev
Log:
Bug 37560: XMLLayout does not escape CDATA sections in NDC or throwables

Modified:
    logging/log4j/trunk/src/changes/changes.xml
    logging/log4j/trunk/src/main/java/org/apache/log4j/xml/XMLLayout.java
    logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/XMLLayoutTest.java

Modified: logging/log4j/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/changes/changes.xml?rev=568774&r1=568773&r2=568774&view=diff
==============================================================================
--- logging/log4j/trunk/src/changes/changes.xml (original)
+++ logging/log4j/trunk/src/changes/changes.xml Wed Aug 22 16:54:50 2007
@@ -22,6 +22,7 @@
   <body>
   
     <release version="1.2.15" date="2007-06-27" description="SyslogAppender enhancements, NTEventLogAppender and Maven build.">
+        <action action="fix" issue="37560">XMLLayout does not escape CDATA sections within NDC or throwables.</action>
        <action action="add" issue="33502">Added test to confirm that DOMConfigurator.configureAndWatch does configure.</action>
         <action action="fix" issue="32527">Default initialization with XML file halts program if JAXP not available.</action>
         <action action="add" issue="17531">Add reset option to PropertyConfigurator and DOMConfigurator.</action>

Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/xml/XMLLayout.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/xml/XMLLayout.java?rev=568774&r1=568773&r2=568774&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/xml/XMLLayout.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/xml/XMLLayout.java Wed Aug 22 16:54:50 2007
@@ -151,7 +151,7 @@
     String ndc = event.getNDC();
     if(ndc != null) {
       buf.append("<log4j:NDC><![CDATA[");
-      buf.append(ndc);
+      Transform.appendEscapingCDATA(buf, ndc);
       buf.append("]]></log4j:NDC>\r\n");       
     }
     
@@ -159,8 +159,8 @@
     if(s != null) {
       buf.append("<log4j:throwable><![CDATA[");
       for(int i = 0; i < s.length; i++) {
-	buf.append(s[i]);
-	buf.append("\r\n");
+          Transform.appendEscapingCDATA(buf, s[i]);
+	      buf.append("\r\n");
       }
       buf.append("]]></log4j:throwable>\r\n");
     }

Modified: logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/XMLLayoutTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/XMLLayoutTest.java?rev=568774&r1=568773&r2=568774&view=diff
==============================================================================
--- logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/XMLLayoutTest.java (original)
+++ logging/log4j/trunk/tests/src/java/org/apache/log4j/xml/XMLLayoutTest.java Wed Aug 22 16:54:50 2007
@@ -28,6 +28,7 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 import org.xml.sax.InputSource;
 
@@ -428,5 +429,55 @@
         }
       }
     }
+
+    /**
+      * Tests CDATA element within NDC content.  See bug 37560.
+      */
+    public void testNDCWithCDATA() throws Exception {
+        Logger logger = Logger.getLogger("com.example.bar");
+        Level level = Level.INFO;
+        String ndcMessage ="<envelope><faultstring><![CDATA[The EffectiveDate]]></faultstring><envelope>";
+        NDC.push(ndcMessage);
+        LoggingEvent event =
+          new LoggingEvent(
+            "com.example.bar", logger, level, "Hello, World", null);
+        Layout layout = createLayout();
+        String result = layout.format(event);
+        NDC.clear();
+        Element parsedResult = parse(result);
+        NodeList ndcs = parsedResult.getElementsByTagName("log4j:NDC");
+        assertEquals(1, ndcs.getLength());
+        StringBuffer buf = new StringBuffer();
+        for(Node child = ndcs.item(0).getFirstChild();
+                child != null;
+                child = child.getNextSibling()) {
+            buf.append(child.getNodeValue());
+        }
+        assertEquals(ndcMessage, buf.toString());
+   }
+
+    /**
+      * Tests CDATA element within exception.  See bug 37560.
+      */
+    public void testExceptionWithCDATA() throws Exception {
+        Logger logger = Logger.getLogger("com.example.bar");
+        Level level = Level.INFO;
+        String exceptionMessage ="<envelope><faultstring><![CDATA[The EffectiveDate]]></faultstring><envelope>";
+        LoggingEvent event =
+          new LoggingEvent(
+            "com.example.bar", logger, level, "Hello, World", new Exception(exceptionMessage));
+        Layout layout = createLayout();
+        String result = layout.format(event);
+        Element parsedResult = parse(result);
+        NodeList throwables = parsedResult.getElementsByTagName("log4j:throwable");
+        assertEquals(1, throwables.getLength());
+        StringBuffer buf = new StringBuffer();
+        for(Node child = throwables.item(0).getFirstChild();
+                child != null;
+                child = child.getNextSibling()) {
+            buf.append(child.getNodeValue());
+        }
+        assertTrue(buf.toString().indexOf(exceptionMessage) != -1);
+   }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org