Skip to content

Commit 939c001

Browse files
committed
ICU-22888 Configure XML processors / external DTDs
1 parent 376da67 commit 939c001

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

icu4j/tools/build/src/main/java/com/ibm/icu/dev/tool/coverage/JacocoReportCheck.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,13 +142,20 @@ public static void main(String... args) {
142142
private static Map<String, ReportEntry> parseReport(File reportXmlFile) {
143143
try {
144144
Map<String, ReportEntry> entries = new TreeMap<String, ReportEntry>();
145-
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
145+
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
146+
dfactory.setNamespaceAware(true);
147+
dfactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
148+
dfactory.setFeature("http://xml.org/sax/features/external-general-entities", false);
149+
dfactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
150+
dfactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
151+
DocumentBuilder docBuilder = dfactory.newDocumentBuilder();
146152
docBuilder.setEntityResolver(new EntityResolver() {
147153
// Ignores JaCoCo report DTD
148154
public InputSource resolveEntity(String publicId, String systemId) {
149155
return new InputSource(new StringReader(""));
150156
}
151157
});
158+
152159
Document doc = docBuilder.parse(reportXmlFile);
153160
NodeList nodes = doc.getElementsByTagName("report");
154161
for (int idx = 0; idx < nodes.getLength(); idx++) {
@@ -384,5 +391,4 @@ Method method() {
384391
return method;
385392
}
386393
}
387-
388394
}

icu4j/tools/misc/src/main/java/com/ibm/icu/dev/tool/localeconverter/XLIFF2ICUConverter.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import javax.xml.XMLConstants;
2121
import javax.xml.parsers.DocumentBuilder;
2222
import javax.xml.parsers.DocumentBuilderFactory;
23+
import javax.xml.parsers.ParserConfigurationException;
2324
import javax.xml.validation.Schema;
2425
import javax.xml.validation.SchemaFactory;
2526

@@ -408,6 +409,10 @@ private void createRB(String xmlfileName) {
408409
String urls = filenameToURL(xmlfileName);
409410
DocumentBuilderFactory dfactory = DocumentBuilderFactory.newInstance();
410411
dfactory.setNamespaceAware(true);
412+
trySettingFeature(dfactory, "http://apache.org/xml/features/disallow-doctype-decl", true);
413+
trySettingFeature(dfactory, "http://xml.org/sax/features/external-general-entities", false);
414+
trySettingFeature(dfactory, "http://xml.org/sax/features/external-parameter-entities", false);
415+
trySettingFeature(dfactory, "http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
411416
Document doc = null;
412417

413418
if (xliff10) {
@@ -416,6 +421,8 @@ private void createRB(String xmlfileName) {
416421
} else {
417422
try {
418423
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
424+
schemaFactory.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, "");
425+
schemaFactory.setProperty(XMLConstants.ACCESS_EXTERNAL_SCHEMA, "");
419426
Schema schema = schemaFactory.newSchema();
420427

421428
dfactory.setSchema(schema);
@@ -1303,4 +1310,13 @@ private void writeBOM(OutputStream buffer) {
13031310
System.exit(1);
13041311
}
13051312
}
1313+
1314+
private static void trySettingFeature(DocumentBuilderFactory dfactory, String name, boolean value) {
1315+
try {
1316+
dfactory.setFeature(name, value);
1317+
} catch (ParserConfigurationException e) {
1318+
e.printStackTrace();
1319+
System.exit(1);
1320+
}
1321+
}
13061322
}

0 commit comments

Comments
 (0)