-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
7
-
x86
-
linux
Run:
---%<---
import java.io.ByteArrayInputStream;
import java.util.logging.Level;
import org.xml.sax.helpers.DefaultHandler;
import java.util.logging.LogRecord;
import java.util.logging.XMLFormatter;
import javax.xml.parsers.SAXParserFactory;
public class XMLFormatterBug {
public static void main(String[] args) throws Exception {
LogRecord rec = new LogRecord(Level.INFO, "This is a bug\b\b\bdefect.");
String xmltext = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
new XMLFormatter().format(rec);
System.out.print(xmltext);
SAXParserFactory.newInstance().newSAXParser().parse(
new ByteArrayInputStream(xmltext.getBytes("UTF-8")),
new DefaultHandler());
}
}
---%<---
I get ("^H" means the actual control char):
---%<---
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b05)
Java HotSpot(TM) Client VM (build 1.7.0-ea-b05, mixed mode, sharing)
<?xml version="1.0" encoding="UTF-8"?>
<record>
<date>2007-01-10T08:42:01</date>
<millis>1168436521500</millis>
<sequence>0</sequence>
<level>INFO</level>
<thread>10</thread>
<message>This is a bug^H^H^Hdefect.</message>
</record>
Exception in thread "main" org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x8) was found in the element content of the document.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1411)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2879)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:198)
at XMLFormatterBug.main(XMLFormatterBug.java:13)
---%<---
The reason is that java.util.logging.XMLFormatter.escape(StringBuffer,String) does not take into account the possibility of non-XML-safe characters as defined in the XML spec.
---%<---
import java.io.ByteArrayInputStream;
import java.util.logging.Level;
import org.xml.sax.helpers.DefaultHandler;
import java.util.logging.LogRecord;
import java.util.logging.XMLFormatter;
import javax.xml.parsers.SAXParserFactory;
public class XMLFormatterBug {
public static void main(String[] args) throws Exception {
LogRecord rec = new LogRecord(Level.INFO, "This is a bug\b\b\bdefect.");
String xmltext = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
new XMLFormatter().format(rec);
System.out.print(xmltext);
SAXParserFactory.newInstance().newSAXParser().parse(
new ByteArrayInputStream(xmltext.getBytes("UTF-8")),
new DefaultHandler());
}
}
---%<---
I get ("^H" means the actual control char):
---%<---
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b05)
Java HotSpot(TM) Client VM (build 1.7.0-ea-b05, mixed mode, sharing)
<?xml version="1.0" encoding="UTF-8"?>
<record>
<date>2007-01-10T08:42:01</date>
<millis>1168436521500</millis>
<sequence>0</sequence>
<level>INFO</level>
<thread>10</thread>
<message>This is a bug^H^H^Hdefect.</message>
</record>
Exception in thread "main" org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x8) was found in the element content of the document.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1411)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2879)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:645)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:508)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:198)
at XMLFormatterBug.main(XMLFormatterBug.java:13)
---%<---
The reason is that java.util.logging.XMLFormatter.escape(StringBuffer,String) does not take into account the possibility of non-XML-safe characters as defined in the XML spec.
- duplicates
-
JDK-4742399 java.util.logging.XMLFormatter allows bad XML characters
-
- Open
-