Skip to content

Commit db01ff7

Browse files
author
Eugene Bochilo
committed
Allow overriding factory creations and safe configurations
DEVSIX-6759
1 parent 89de8b4 commit db01ff7

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

kernel/src/main/java/com/itextpdf/kernel/utils/DefaultSafeXmlParserFactory.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public DefaultSafeXmlParserFactory() {
114114

115115
@Override
116116
public DocumentBuilder createDocumentBuilderInstance(boolean namespaceAware, boolean ignoringComments) {
117-
DocumentBuilderFactory factory = XmlUtil.getDocumentBuilderFactory();
117+
DocumentBuilderFactory factory = createDocumentBuilderFactory();
118118
configureSafeDocumentBuilderFactory(factory);
119119
factory.setNamespaceAware(namespaceAware);
120120
factory.setIgnoringComments(ignoringComments);
@@ -130,7 +130,7 @@ public DocumentBuilder createDocumentBuilderInstance(boolean namespaceAware, boo
130130

131131
@Override
132132
public XMLReader createXMLReaderInstance(boolean namespaceAware, boolean validating) {
133-
SAXParserFactory factory = XmlUtil.createSAXParserFactory();
133+
SAXParserFactory factory = createSAXParserFactory();
134134
factory.setNamespaceAware(namespaceAware);
135135
factory.setValidating(validating);
136136
configureSafeSAXParserFactory(factory);
@@ -145,7 +145,30 @@ public XMLReader createXMLReaderInstance(boolean namespaceAware, boolean validat
145145
return xmlReader;
146146
}
147147

148-
private void configureSafeDocumentBuilderFactory(DocumentBuilderFactory factory) {
148+
/**
149+
* Creates a document builder factory implementation.
150+
*
151+
* @return result of {@link DocumentBuilderFactory#newInstance()} call
152+
*/
153+
protected DocumentBuilderFactory createDocumentBuilderFactory() {
154+
return XmlUtil.getDocumentBuilderFactory();
155+
}
156+
157+
/**
158+
* Creates a SAX parser factory implementation.
159+
*
160+
* @return result of {@link SAXParserFactory#newInstance()} call
161+
*/
162+
protected SAXParserFactory createSAXParserFactory() {
163+
return XmlUtil.createSAXParserFactory();
164+
}
165+
166+
/**
167+
* Configures document builder factory to make it secure against xml attacks.
168+
*
169+
* @param factory {@link DocumentBuilderFactory} instance to be configured
170+
*/
171+
protected void configureSafeDocumentBuilderFactory(DocumentBuilderFactory factory) {
149172
tryToSetFeature(factory, DISALLOW_DOCTYPE_DECL, true);
150173
tryToSetFeature(factory, EXTERNAL_GENERAL_ENTITIES, false);
151174
tryToSetFeature(factory, EXTERNAL_PARAMETER_ENTITIES, false);
@@ -155,7 +178,12 @@ private void configureSafeDocumentBuilderFactory(DocumentBuilderFactory factory)
155178
factory.setExpandEntityReferences(false);
156179
}
157180

158-
private void configureSafeSAXParserFactory(SAXParserFactory factory) {
181+
/**
182+
* Configures SAX parser factory to make it secure against xml attacks.
183+
*
184+
* @param factory {@link SAXParserFactory} instance to be configured
185+
*/
186+
protected void configureSafeSAXParserFactory(SAXParserFactory factory) {
159187
tryToSetFeature(factory, DISALLOW_DOCTYPE_DECL, true);
160188
tryToSetFeature(factory, EXTERNAL_GENERAL_ENTITIES, false);
161189
tryToSetFeature(factory, EXTERNAL_PARAMETER_ENTITIES, false);

0 commit comments

Comments
 (0)