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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]