neeraj 2002/12/12 02:42:37 Modified: java/src/org/apache/xerces/impl Tag: jaxp_1_2_2_branch XMLEntityManager.java Constants.java java/src/org/apache/xerces/impl/msg Tag: jaxp_1_2_2_branch XMLMessages.properties Log: Revision Changes Path No revision No revision 1.53.2.1 +41 -4 xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java Index: XMLEntityManager.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/XMLEntityManager.java,v retrieving revision 1.53 retrieving revision 1.53.2.1 diff -u -r1.53 -r1.53.2.1 --- XMLEntityManager.java 21 Nov 2002 23:04:51 -0000 1.53 +++ XMLEntityManager.java 12 Dec 2002 10:42:36 -0000 1.53.2.1 @@ -180,6 +180,11 @@ protected static final String BUFFER_SIZE = Constants.XERCES_PROPERTY_PREFIX + Constants.BUFFER_SIZE_PROPERTY; + /** property identifier: Entity expansion limit */ + protected static final String ENTITY_EXPANSION_LIMIT = + Constants.XERCES_PROPERTY_PREFIX + Constants.ENTITY_EXPANSION_LIMIT; + + // recognized features and properties /** Recognized features. */ @@ -206,7 +211,8 @@ ERROR_REPORTER, ENTITY_RESOLVER, VALIDATION_MANAGER, - BUFFER_SIZE + BUFFER_SIZE, + ENTITY_EXPANSION_LIMIT }; /** Property defaults. */ @@ -216,6 +222,7 @@ null, null, new Integer(DEFAULT_BUFFER_SIZE), + null }; private static final String XMLEntity = "[xml]".intern(); @@ -242,6 +249,7 @@ // // Data // + private static int entityExpansionLimit = 0 ; // features @@ -309,6 +317,10 @@ */ protected int fBufferSize = DEFAULT_BUFFER_SIZE; + //Application can set the limit of number of entities that can be expanded. + protected java.lang.Integer fEntityExpansionLimit = null ; + protected int fEntityExpansionCount ; + /** * True if the document entity is standalone. This should really * only be set by the document source (e.g. XMLDocumentScanner). @@ -837,7 +849,17 @@ boolean literal, boolean isExternal) throws IOException, XNIException { // get information - + + //when entity expansion limit is set by the Application, before opening any new entity + //parser check for the entity expansion limit set by the parser, if number of entity + //expansions exceeds the entity expansion limit, parser will throw fatal error. + if( fEntityExpansionLimit != null && fEntityExpansionCount++ > fEntityExpansionLimit.intValue() ){ + fErrorReporter.reportError(XMLMessageFormatter.XML_DOMAIN, + "EntityExpansionLimitExceeded", + new Object[]{fEntityExpansionLimit }, + XMLErrorReporter.SEVERITY_FATAL_ERROR ); + } + final String publicId = xmlInputSource.getPublicId(); final String literalSystemId = xmlInputSource.getSystemId(); String baseSystemId = xmlInputSource.getBaseSystemId(); @@ -922,7 +944,7 @@ // we've seen a new Reader. put it in a list, so that // we can close it later. fOwnReaders.addElement(reader); - + // push entity on stack if (fCurrentEntity != null) { fEntityStack.push(fCurrentEntity); @@ -1036,6 +1058,15 @@ catch (XMLConfigurationException e) { fValidationManager = null; } + // adding new property http://xml.apache.org/properties/entity-expansion-limit + // using this property application can set the limit of number of the entities that + // will be expanded. + try { + fEntityExpansionLimit = (java.lang.Integer)componentManager.getProperty(ENTITY_EXPANSION_LIMIT); + } + catch (XMLConfigurationException e) { + fEntityExpansionLimit = null; + } // initialize state fStandalone = false; @@ -1159,7 +1190,13 @@ bufferSize.intValue() > DEFAULT_XMLDECL_BUFFER_SIZE) { fBufferSize = bufferSize.intValue(); } + return ; + } + if (property.equals(Constants.ENTITY_EXPANSION_LIMIT)) { + Integer entityExpansionLimit = (Integer)value; + return ; } + } } // setProperty(String,Object) 1.24.2.1 +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.24 retrieving revision 1.24.2.1 diff -u -r1.24 -r1.24.2.1 --- Constants.java 2 Dec 2002 19:28:45 -0000 1.24 +++ Constants.java 12 Dec 2002 10:42:36 -0000 1.24.2.1 @@ -273,6 +273,9 @@ /** Input buffer size property ("input-buffer-size"). */ public static final String BUFFER_SIZE_PROPERTY = "input-buffer-size"; + /** ENTITY EXPANSION LIMIT */ + public static final String ENTITY_EXPANSION_LIMIT = "entity-expansion-limit"; + /** Entity resolver property ("internal/entity-resolver"). */ public static final String ENTITY_RESOLVER_PROPERTY = "internal/entity-resolver"; No revision No revision 1.15.2.1 +3 -0 xml-xerces/java/src/org/apache/xerces/impl/msg/XMLMessages.properties Index: XMLMessages.properties =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/msg/XMLMessages.properties,v retrieving revision 1.15 retrieving revision 1.15.2.1 diff -u -r1.15 -r1.15.2.1 --- XMLMessages.properties 2 Dec 2002 19:26:53 -0000 1.15 +++ XMLMessages.properties 12 Dec 2002 10:42:37 -0000 1.15.2.1 @@ -274,3 +274,6 @@ MSG_SPACE_REQUIRED_AFTER_SYSTEMLITERAL_IN_EXTERNALID=MSG_SPACE_REQUIRED_AFTER_SYSTEMLITERAL_IN_EXTERNALID OpenQuoteMissingInDecl=OpenQuoteMissingInDecl InvalidCharInLiteral=InvalidCharInLiteral + +#Application can set the limit of number of entities that should be expanded by the parser. +EntityExpansionLimitExceeded=Parser has exceeded the entity expansion limit \"{0}\" set by the application.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]