@Test public void testEntityExpansionLimit() throws SAXException { // The XML with XXE problem final String sXML = "<?xml version='1.0' encoding='utf-8'?>" + "<!DOCTYPE root [" + " <!ELEMENT root ANY >" + " <!ENTITY e1 \"value\" >" + " <!ENTITY e2 \"&e1;&e1;&e1;&e1;&e1;&e1;&e1;&e1;&e1;&e1;\" >" + " <!ENTITY e3 \"&e2;&e2;&e2;&e2;&e2;&e2;&e2;&e2;&e2;&e2;\" >" + " <!ENTITY e4 \"&e3;&e3;&e3;&e3;&e3;&e3;&e3;&e3;&e3;&e3;\" >" + " <!ENTITY e5 \"&e4;&e4;&e4;&e4;&e4;&e4;&e4;&e4;&e4;&e4;\" >" + " <!ENTITY e6 \"&e5;&e5;&e5;&e5;&e5;&e5;&e5;&e5;&e5;&e5;\" >" // + // " <!ENTITY e7 \"&e6;&e6;&e6;&e6;&e6;&e6;&e6;&e6;&e6;&e6;\" >" // + // " <!ENTITY e8 \"&e7;&e7;&e7;&e7;&e7;&e7;&e7;&e7;&e7;&e7;\" >" // + // " <!ENTITY e9 \"&e8;&e8;&e8;&e8;&e8;&e8;&e8;&e8;&e8;&e8;\" >" // + // " <!ENTITY e10 \"&e9;&e9;&e9;&e9;&e9;&e9;&e9;&e9;&e9;&e9;\" >" + "]>" + "<root>&e6;</root>"; final DOMReaderSettings aDRS = new DOMReaderSettings(); // Read successful - entity expansion! final Document aDoc = DOMReader.readXMLDOM(sXML, aDRS); assertNotNull(aDoc); assertEquals( StringHelper.getRepeated("value", (int) Math.pow(10, 5)), aDoc.getDocumentElement().getTextContent()); // Should fail because too many entity expansions try { DOMReader.readXMLDOM( sXML, aDRS.getClone().setFeatureValues(EXMLParserFeature.AVOID_DOS_SETTINGS)); fail(); } catch (final SAXParseException ex) { // Expected assertTrue(ex.getMessage().contains("entity expansions")); } }