JDK-8153781 : Issue in XMLScanner: EXPECTED_SQUARE_BRACKET_TO_CLOSE_INTERNAL_SUBSET when skipping large DOCTYPE section with CRLF at wrong place
  • Type: Bug
  • Component: xml
  • Sub-Component: jaxp
  • Affected Version: 9
  • Priority: P3
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2016-04-07
  • Updated: 2016-10-13
  • Resolved: 2016-04-20
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 8 JDK 9
8u112Fixed 9 b116Fixed
Description
Under certain circumstances, the following exception might occur during XML scanning:
Exception in thread "main" java.util.MissingResourceException: EXPECTED_SQUARE_BRACKET_TO_CLOSE_INTERNAL_SUBSET
        at com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter.formatMessage(java.xml@9-internal/XMLMessageFormatter.java:99)
        at com.sun.xml.internal.stream.StaxErrorReporter.reportError(java.xml@9-internal/StaxErrorReporter.java:93)
        at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(java.xml@9-internal/XMLScanner.java:1444)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(java.xml@9-internal/XMLDocumentScannerImpl.java:1109)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(java.xml@9-internal/XMLDocumentScannerImpl.java:1044)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(java.xml@9-internal/XMLDocumentScannerImpl.java:932)
        at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(java.xml@9-internal/XMLDocumentScannerImpl.java:601)
        at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(java.xml@9-internal/XMLNSDocumentScannerImpl.java:111)
        at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(java.xml@9-internal/XMLStreamReaderImpl.java:553)
        at com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(java.xml@9-internal/XMLEventReaderImpl.java:83)
        at com.sap.cl.xml.test.XMLEventReaderTest.main(XMLEventReaderTest.java:39)

Following is a small test to reproduce the behavior:
	public static void main(String[] args) throws Exception {
		StringBuilder xmlcontentbuilder = new StringBuilder(XMLEntityManager.DEFAULT_BUFFER_SIZE * 2);
		xmlcontentbuilder.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n");
		xmlcontentbuilder.append("<!DOCTYPE dummy [\r\n");
		xmlcontentbuilder.append("  <!ELEMENT dummy EMPTY>\r\n");
		xmlcontentbuilder.append("  <!--\r\n");
		xmlcontentbuilder.append("  ");
		int textlen = XMLEntityManager.DEFAULT_BUFFER_SIZE - xmlcontentbuilder.length() - 2 - 1;
		for (int i = 0; i < textlen; i++)
			xmlcontentbuilder.append('a');
		xmlcontentbuilder.append("\r\n");
		xmlcontentbuilder.append("  -->\r\n");
		xmlcontentbuilder.append("  ]\r\n");
		xmlcontentbuilder.append(">\r\n");
		xmlcontentbuilder.append("<dummy>\r\n");
		xmlcontentbuilder.append("</dummy>\r\n");

	    XMLInputFactory factory = XMLInputFactory.newInstance();
	    factory.setProperty(XMLInputFactory.SUPPORT_DTD, false);
	    StringReader stringReader = new StringReader(xmlcontentbuilder.toString());
	    XMLEventReader reader = factory.createXMLEventReader(stringReader);

	    while (reader.hasNext()) {
	      XMLEvent event = reader.nextEvent();
	      System.out.println("Event Type: " + event.getEventType());
	    }
	}

Comments
Source to reproduce behavior
07-04-2016