diff --git a/core/src/java/org/jdom2/input/sax/SAXBuilderEngine.java b/core/src/java/org/jdom2/input/sax/SAXBuilderEngine.java index 605cb0e6..d12fe9d8 100644 --- a/core/src/java/org/jdom2/input/sax/SAXBuilderEngine.java +++ b/core/src/java/org/jdom2/input/sax/SAXBuilderEngine.java @@ -70,6 +70,7 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT import org.xml.sax.XMLReader; import org.jdom2.Document; +import org.jdom2.IllegalDataException; import org.jdom2.JDOMException; import org.jdom2.JDOMFactory; import org.jdom2.input.JDOMParseException; @@ -235,6 +236,9 @@ public Document build(final InputSource in) } catch (final SAXException e) { throw new JDOMParseException("Error in building: " + e.getMessage(), e, saxHandler.getDocument()); + } catch (final IllegalDataException e) { + throw new JDOMParseException("Error in building: " + + e.getMessage(), e, saxHandler.getDocument()); } finally { // Explicitly nullify the handler to encourage GC // It's a stack var so this shouldn't be necessary, but it diff --git a/test/src/java/org/jdom2/test/cases/input/TestSAXBuilder.java b/test/src/java/org/jdom2/test/cases/input/TestSAXBuilder.java index a484ed3f..c47fadf0 100644 --- a/test/src/java/org/jdom2/test/cases/input/TestSAXBuilder.java +++ b/test/src/java/org/jdom2/test/cases/input/TestSAXBuilder.java @@ -101,10 +101,12 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT import org.jdom2.DefaultJDOMFactory; import org.jdom2.Document; import org.jdom2.EntityRef; +import org.jdom2.IllegalDataException; import org.jdom2.JDOMConstants; import org.jdom2.JDOMException; import org.jdom2.JDOMFactory; import org.jdom2.UncheckedJDOMFactory; +import org.jdom2.input.JDOMParseException; import org.jdom2.input.SAXBuilder; import org.jdom2.input.sax.BuilderErrorHandler; import org.jdom2.input.sax.SAXEngine; @@ -1035,6 +1037,19 @@ public void testBuildReader() { } } + @Test + public void testXML11IllegalCharacterIsReportedAsParseException() + throws JDOMException, IOException { + final String xml = "" + + "char:"; + try { + new SAXBuilder().build(new CharArrayReader(xml.toCharArray())); + failNoException(JDOMParseException.class); + } catch (final JDOMParseException e) { + assertTrue(e.getCause() instanceof IllegalDataException); + } + } + @Test public void testBuildReaderString() { char[] chars = testxml.toCharArray();