sandygao 2002/12/02 11:28:45 Modified: java/src/org/apache/xerces/impl Constants.java XMLDocumentScannerImpl.java Log: Introducing a new feature "disallow-doctype-decl". When this feature is set to true, a fatal error is thrown when the incoming document contains a doctype decl. This is to solve a security problem: processing the internal subset of the DTD might bring the JVM down. Revision Changes Path 1.24 +4 -1 xml-xerces/java/src/org/apache/xerces/impl/Constants.java Index: Constants.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/Constants.java,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- Constants.java 27 Sep 2002 14:15:09 -0000 1.23 +++ Constants.java 2 Dec 2002 19:28:45 -0000 1.24 @@ -211,6 +211,9 @@ /** Allow Java encoding names feature ("allow-java-encodings"). */ public static final String ALLOW_JAVA_ENCODINGS_FEATURE = "allow-java-encodings"; + /** Disallow DOCTYPE declaration feature ("disallow-doctype-decl"). */ + public static final String DISALLOW_DOCTYPE_DECL_FEATURE = "disallow-doctype-decl"; + /** Continue after fatal error feature ("continue-after-fatal-error"). */ public static final String CONTINUE_AFTER_FATAL_ERROR_FEATURE = "continue-after-fatal-error"; 1.30 +24 -2 xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java Index: XMLDocumentScannerImpl.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- XMLDocumentScannerImpl.java 19 Nov 2002 01:41:37 -0000 1.29 +++ XMLDocumentScannerImpl.java 2 Dec 2002 19:28:45 -0000 1.30 @@ -146,6 +146,10 @@ protected static final String LOAD_EXTERNAL_DTD = Constants.XERCES_FEATURE_PREFIX + Constants.LOAD_EXTERNAL_DTD_FEATURE; + /** Feature identifier: load external DTD. */ + protected static final String DISALLOW_DOCTYPE_DECL_FEATURE = + Constants.XERCES_FEATURE_PREFIX + Constants.DISALLOW_DOCTYPE_DECL_FEATURE; + // property identifiers /** Property identifier: DTD scanner. */ @@ -161,11 +165,13 @@ /** Recognized features. */ private static final String[] RECOGNIZED_FEATURES = { LOAD_EXTERNAL_DTD, + DISALLOW_DOCTYPE_DECL_FEATURE, }; /** Feature defaults. */ private static final Boolean[] FEATURE_DEFAULTS = { Boolean.TRUE, + Boolean.FALSE, }; /** Recognized properties. */ @@ -215,6 +221,9 @@ /** Load external DTD. */ protected boolean fLoadExternalDTD = true; + /** Disallow doctype declaration. */ + protected boolean fDisallowDoctype = false; + // state /** Seen doctype declaration. */ @@ -306,7 +315,13 @@ catch (XMLConfigurationException e) { fLoadExternalDTD = true; } - + try { + fDisallowDoctype = componentManager.getFeature(DISALLOW_DOCTYPE_DECL_FEATURE); + } + catch (XMLConfigurationException e) { + fDisallowDoctype = false; + } + // xerces properties fDTDScanner = (XMLDTDScanner)componentManager.getProperty(DTD_SCANNER); try { @@ -368,6 +383,10 @@ fLoadExternalDTD = state; return; } + else if (feature.equals(Constants.DISALLOW_DOCTYPE_DECL_FEATURE)) { + fDisallowDoctype = state; + return; + } } } // setFeature(String,boolean) @@ -765,6 +784,9 @@ break; } case SCANNER_STATE_DOCTYPE: { + if (fDisallowDoctype) { + reportFatalError("DoctypeNotAllowed", null); + } if (fSeenDoctypeDecl) { reportFatalError("AlreadySeenDoctype", null); }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]