Skip to content

Commit 4f7cbd6

Browse files
committed
8327378: XMLStreamReader throws EOFException instead of XMLStreamException
1 parent b40f8ee commit 4f7cbd6

File tree

3 files changed

+67
-6
lines changed

3 files changed

+67
-6
lines changed

src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDTDScannerImpl.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved.
33
*/
44
/*
55
* Licensed to the Apache Software Foundation (ASF) under one or more
@@ -63,7 +63,7 @@
6363
* @author Glenn Marcy, IBM
6464
* @author Eric Ye, IBM
6565
*
66-
* @LastModified: July 2023
66+
* @LastModified: Feb 2025
6767
*/
6868
public class XMLDTDScannerImpl
6969
extends XMLScanner
@@ -670,7 +670,10 @@ public void endEntity(String name, Augmentations augs)
670670
//fIncludeSectDepth != 0 or fExtEntityDepth != 0 throw Exception
671671
if (augs != null && Boolean.TRUE.equals(augs.getItem(Constants.LAST_ENTITY))
672672
&& ( fMarkUpDepth != 0 || fExtEntityDepth !=0 || fIncludeSectDepth != 0)){
673-
throw new EOFException();
673+
fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN,
674+
"PrematureEOF",
675+
new Object[]{ name },
676+
XMLErrorReporter.SEVERITY_FATAL_ERROR);
674677
}
675678

676679
} // endEntity(String)

src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2003, 2025, Oracle and/or its affiliates. All rights reserved.
33
*/
44

55
/*
@@ -71,7 +71,7 @@
7171
* Refer to the table in unit-test javax.xml.stream.XMLStreamReaderTest.SupportDTD for changes
7272
* related to property SupportDTD.
7373
* @author Joe Wang, Sun Microsystems
74-
* @LastModified: Nov 2023
74+
* @LastModified: Feb 2025
7575
*/
7676
public class XMLDocumentScannerImpl
7777
extends XMLDocumentFragmentScannerImpl{
@@ -1225,7 +1225,6 @@ public boolean dispatch(boolean complete)
12251225
}
12261226
// premature end of file
12271227
catch (EOFException e) {
1228-
e.printStackTrace();
12291228
reportFatalError("PrematureEOF", null);
12301229
return false;
12311230
//throw e;
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* This code is free software; you can redistribute it and/or modify it
6+
* under the terms of the GNU General Public License version 2 only, as
7+
* published by the Free Software Foundation.
8+
*
9+
* This code is distributed in the hope that it will be useful, but WITHOUT
10+
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12+
* version 2 for more details (a copy is included in the LICENSE file that
13+
* accompanied this code).
14+
*
15+
* You should have received a copy of the GNU General Public License version
16+
* 2 along with this work; if not, write to the Free Software Foundation,
17+
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18+
*
19+
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20+
* or visit www.oracle.com if you need additional information or have any
21+
* questions.
22+
*/
23+
package stream.XMLStreamReaderTest;
24+
25+
import javax.xml.stream.XMLInputFactory;
26+
import javax.xml.stream.XMLStreamException;
27+
import javax.xml.stream.XMLStreamReader;
28+
import java.io.StringReader;
29+
import org.junit.jupiter.api.Test;
30+
import static org.junit.jupiter.api.Assertions.assertThrows;
31+
32+
/*
33+
* @test
34+
* @bug 8327378
35+
* @summary Verifies exception handling
36+
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
37+
* @run junit stream.XMLStreamReaderTest.ExceptionTest
38+
*/
39+
public class ExceptionTest {
40+
41+
/**
42+
* Verifies that the XMLStreamReader throws XMLStreamException instead of EOFException.
43+
* The specification for the XMLStreamReader's next method:
44+
* Throws: XMLStreamException - if there is an error processing the underlying XML source
45+
* @throws Exception if the test fails
46+
*/
47+
@Test
48+
public void testExpectedException() throws Exception {
49+
XMLInputFactory xmlInputFactory = XMLInputFactory.newDefaultFactory();
50+
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(
51+
new StringReader("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY"));
52+
53+
assertThrows(XMLStreamException.class, () -> {
54+
while (xmlStreamReader.hasNext()) {
55+
int event = xmlStreamReader.next();
56+
}
57+
});
58+
}
59+
}

0 commit comments

Comments
 (0)