summaryrefslogtreecommitdiff
path: root/java/openjdk6/files/icedtea/openjdk/oj6-20-merge.patch
diff options
context:
space:
mode:
Diffstat (limited to 'java/openjdk6/files/icedtea/openjdk/oj6-20-merge.patch')
-rw-r--r--java/openjdk6/files/icedtea/openjdk/oj6-20-merge.patch599
1 files changed, 599 insertions, 0 deletions
diff --git a/java/openjdk6/files/icedtea/openjdk/oj6-20-merge.patch b/java/openjdk6/files/icedtea/openjdk/oj6-20-merge.patch
new file mode 100644
index 000000000000..e689c33d8a9f
--- /dev/null
+++ b/java/openjdk6/files/icedtea/openjdk/oj6-20-merge.patch
@@ -0,0 +1,599 @@
+# HG changeset patch
+# User andrew
+# Date 1383034761 0
+# Tue Oct 29 08:19:21 2013 +0000
+# Node ID 05c35de6d7047c6d6d6e8edc402b7fab861d0a21
+# Parent efb24af909a020f3a3b3d446f6db15fc8b1c309a
+OPENJDK6-20: Resolve merge issues with JAXP security fixes
+Reviewed-by: omajid
+
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java Tue Oct 29 08:19:21 2013 +0000
+@@ -157,6 +157,25 @@
+ }
+
+ /**
++ * Return allowed protocols for accessing external stylesheet.
++ */
++ public Object getProperty(String name) {
++ if (name.equals(XalanConstants.SECURITY_MANAGER)) {
++ return _xmlSecurityManager;
++ }
++ return null;
++ }
++
++ /**
++ * Set allowed protocols for accessing external stylesheet.
++ */
++ public void setProperty(String name, Object value) {
++ if (name.equals(XalanConstants.SECURITY_MANAGER)) {
++ _xmlSecurityManager = (XMLSecurityManager)value;
++ }
++ }
++
++ /**
+ * Only for user by the internal TrAX implementation.
+ */
+ public Parser getParser() {
+@@ -901,23 +920,4 @@
+ return newDataOffset;
+ }
+
+- /**
+- * Return allowed protocols for accessing external stylesheet.
+- */
+- public Object getProperty(String name) {
+- if (name.equals(XalanConstants.SECURITY_MANAGER)) {
+- return _xmlSecurityManager;
+- }
+- return null;
+- }
+-
+- /**
+- * Set allowed protocols for accessing external stylesheet.
+- */
+- public void setProperty(String name, Object value) {
+- if (name.equals(XalanConstants.SECURITY_MANAGER)) {
+- _xmlSecurityManager = (XMLSecurityManager)value;
+- }
+- }
+-
+ }
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java Tue Oct 29 08:19:21 2013 +0000
+@@ -283,6 +283,14 @@
+ } else if (name.equals(XalanConstants.SECURITY_MANAGER)) {
+ return _xmlSecurityManager;
+ }
++
++ /** Check to see if the property is managed by the security manager **/
++ String propertyValue = (_xmlSecurityManager != null) ?
++ _xmlSecurityManager.getLimitAsString(name) : null;
++ if (propertyValue != null) {
++ return propertyValue;
++ }
++
+ // Throw an exception for all other attributes
+ ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_INVALID_ATTR_ERR, name);
+ throw new IllegalArgumentException(err.toString());
+@@ -383,6 +391,11 @@
+ }
+ }
+
++ if (_xmlSecurityManager != null &&
++ _xmlSecurityManager.setLimit(name, XMLSecurityManager.State.APIPROPERTY, value)) {
++ return;
++ }
++
+ // Throw an exception for all other attributes
+ final ErrorMsg err
+ = new ErrorMsg(ErrorMsg.JAXP_INVALID_ATTR_ERR, name);
+@@ -856,7 +869,13 @@
+ } else {
+ err = new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR);
+ }
+- TransformerConfigurationException exc = new TransformerConfigurationException(err.toString(), err.getCause());
++ Throwable cause = err.getCause();
++ TransformerConfigurationException exc;
++ if (cause != null) {
++ exc = new TransformerConfigurationException(cause.getMessage(), cause);
++ } else {
++ exc = new TransformerConfigurationException(err.toString());
++ }
+
+ // Pass compiler errors to the error listener
+ if (_errorListener != null) {
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/impl/PropertyManager.java Tue Oct 29 08:19:21 2013 +0000
+@@ -179,6 +179,13 @@
+ return;
+ }
+
++ //check if the property is managed by security manager
++ if (fSecurityManager == null ||
++ !fSecurityManager.setLimit(property, XMLSecurityManager.State.APIPROPERTY, value)) {
++ //fall back to the existing property manager
++ supportedProps.put(property, value);
++ }
++
+ supportedProps.put(property, value ) ;
+ if(equivalentProperty != null){
+ supportedProps.put(equivalentProperty, value ) ;
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderFactoryImpl.java Tue Oct 29 08:19:21 2013 +0000
+@@ -191,6 +191,9 @@
+
+ public void setFeature(String name, boolean value)
+ throws ParserConfigurationException {
++ if (features == null) {
++ features = new Hashtable();
++ }
+ // If this is the secure processing feature, save it then return.
+ if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) {
+ if (System.getSecurityManager() != null && (!value)) {
+@@ -199,11 +202,10 @@
+ "jaxp-secureprocessing-feature", null));
+ }
+ fSecureProcess = value;
++ features.put(name, value ? Boolean.TRUE : Boolean.FALSE);
+ return;
+ }
+- if (features == null) {
+- features = new Hashtable();
+- }
++
+ features.put(name, value ? Boolean.TRUE : Boolean.FALSE);
+ // Test the feature by possibly throwing SAX exceptions
+ try {
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java Tue Oct 29 08:19:21 2013 +0000
+@@ -253,12 +253,16 @@
+ }
+ }
+ } else {
+- // Let Xerces code handle the property
+- domParser.setProperty(name, val);
+- }
+- }
++ //check if the property is managed by security manager
++ if (fSecurityManager == null ||
++ !fSecurityManager.setLimit(name, XMLSecurityManager.State.APIPROPERTY, val)) {
++ //fall back to the existing property manager
++ domParser.setProperty(name, val);
++ }
+ }
++ }
+ }
++ }
+
+ /**
+ * Non-preferred: use the getDOMImplementation() method instead of this
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserFactoryImpl.java Tue Oct 29 08:19:21 2013 +0000
+@@ -124,6 +124,7 @@
+ "jaxp-secureprocessing-feature", null));
+ }
+ fSecureProcess = value;
++ putInFeatures(name, value);
+ return;
+ }
+
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/SAXParserImpl.java Tue Oct 29 08:19:21 2013 +0000
+@@ -344,8 +344,10 @@
+ fSecurityManager = new XMLSecurityManager(true);
+ try {
+ super.setProperty(SECURITY_MANAGER, fSecurityManager);
+- } catch (Exception ex) {
+- //shall not happen
++ } catch (SAXException e) {
++ throw new UnsupportedOperationException(
++ SAXMessageFormatter.formatMessage(fConfiguration.getLocale(),
++ "property-not-recognized", new Object [] {SECURITY_MANAGER}), e);
+ }
+ }
+ }
+@@ -475,14 +477,21 @@
+ return;
+ }
+ }
+- if (!fInitProperties.containsKey(name)) {
+- fInitProperties.put(name, super.getProperty(name));
+- }
+ /** Forward property to the schema validator if there is one. **/
+ if (fSAXParser != null && fSAXParser.fSchemaValidator != null) {
+ setSchemaValidatorProperty(name, value);
+ }
+- super.setProperty(name, value);
++
++ //check if the property is managed by security manager
++ if (fSecurityManager == null ||
++ !fSecurityManager.setLimit(name, XMLSecurityManager.State.APIPROPERTY, value)) {
++ //fall back to the existing property manager
++ if (!fInitProperties.containsKey(name)) {
++ fInitProperties.put(name, super.getProperty(name));
++ }
++ super.setProperty(name, value);
++ }
++
+ }
+
+ public synchronized Object getProperty(String name)
+@@ -495,6 +504,14 @@
+ // JAXP 1.2 support
+ return fSAXParser.schemaLanguage;
+ }
++
++ /** Check to see if the property is managed by the security manager **/
++ String propertyValue = (fSecurityManager != null) ?
++ fSecurityManager.getLimitAsString(name) : null;
++ if (propertyValue != null) {
++ return propertyValue;
++ }
++
+ return super.getProperty(name);
+ }
+
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/AbstractXMLSchema.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/AbstractXMLSchema.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/AbstractXMLSchema.java Tue Oct 29 08:19:21 2013 +0000
+@@ -85,8 +85,7 @@
+ /*
+ * Other methods
+ */
+-
+- final void setFeature(String featureId, boolean state) {
++ public final void setFeature(String featureId, boolean state) {
+ fFeatures.put(featureId, state ? Boolean.TRUE : Boolean.FALSE);
+ }
+
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaFactory.java Tue Oct 29 08:19:21 2013 +0000
+@@ -239,6 +239,7 @@
+ else {
+ schema = new EmptyXMLSchema();
+ }
++ propagateProperties(schema);
+ propagateFeatures(schema);
+ return schema;
+ }
+@@ -247,6 +248,7 @@
+ // Use a Schema that uses the system id as the equality source.
+ AbstractXMLSchema schema = new WeakReferenceXMLSchema();
+ propagateFeatures(schema);
++ propagateProperties(schema);
+ return schema;
+ }
+
+@@ -322,7 +324,6 @@
+ "jaxp-secureprocessing-feature", null));
+ }
+
+- fSecurityManager = value ? new XMLSecurityManager() : null;
+ fSecurityManager.setSecureProcessing(value);
+ fXMLSchemaLoader.setProperty(SECURITY_MANAGER, fSecurityManager);
+ return;
+@@ -362,7 +363,12 @@
+ "property-not-supported", new Object [] {name}));
+ }
+ try {
+- fXMLSchemaLoader.setProperty(name, object);
++ //check if the property is managed by security manager
++ if (fSecurityManager == null ||
++ !fSecurityManager.setLimit(name, XMLSecurityManager.State.APIPROPERTY, object)) {
++ //fall back to the existing property manager
++ fXMLSchemaLoader.setProperty(name, object);
++ }
+ }
+ catch (XMLConfigurationException e) {
+ String identifier = e.getIdentifier();
+@@ -388,6 +394,15 @@
+ }
+ }
+
++ private void propagateProperties(AbstractXMLSchema schema) {
++ String[] properties = fXMLSchemaLoader.getRecognizedProperties();
++ for (int i = 0; i < properties.length; ++i) {
++ Object state = fXMLSchemaLoader.getProperty(properties[i]);
++ schema.setProperty(properties[i], state);
++ }
++ }
++
++
+ /**
+ * Extension of XMLGrammarPoolImpl which exposes the number of
+ * grammars stored in the grammar pool.
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/jaxp/validation/XMLSchemaValidatorComponentManager.java Tue Oct 29 08:19:21 2013 +0000
+@@ -368,11 +368,15 @@
+ return;
+ }
+
+- //fall back to the existing property manager
+- if (!fInitProperties.containsKey(propertyId)) {
+- fInitProperties.put(propertyId, super.getProperty(propertyId));
++ //check if the property is managed by security manager
++ if (fInitSecurityManager == null ||
++ !fInitSecurityManager.setLimit(propertyId, XMLSecurityManager.State.APIPROPERTY, value)) {
++ //fall back to the existing property manager
++ if (!fInitProperties.containsKey(propertyId)) {
++ fInitProperties.put(propertyId, super.getProperty(propertyId));
++ }
++ super.setProperty(propertyId, value);
+ }
+- super.setProperty(propertyId, value);
+ }
+
+ /**
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java
+--- jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java Tue Oct 29 08:11:44 2013 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/parsers/SAXParser.java Tue Oct 29 08:19:21 2013 +0000
+@@ -25,6 +25,8 @@
+ import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
+ import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool;
+ import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
++import org.xml.sax.SAXNotRecognizedException;
++import org.xml.sax.SAXNotSupportedException;
+
+ /**
+ * This is the main Xerces SAX parser class. It uses the abstract SAX
+@@ -125,4 +127,31 @@
+
+ } // <init>(SymbolTable,XMLGrammarPool)
+
++ /**
++ * Sets the particular property in the underlying implementation of
++ * org.xml.sax.XMLReader.
++ */
++ public void setProperty(String name, Object value)
++ throws SAXNotRecognizedException, SAXNotSupportedException {
++ /**
++ * It's possible for users to set a security manager through the interface.
++ * If it's the old SecurityManager, convert it to the new XMLSecurityManager
++ */
++ if (name.equals(Constants.SECURITY_MANAGER)) {
++ securityManager = XMLSecurityManager.convert(value, securityManager);
++ super.setProperty(Constants.SECURITY_MANAGER, securityManager);
++ return;
++ }
++
++ if (securityManager == null) {
++ securityManager = new XMLSecurityManager(true);
++ super.setProperty(Constants.SECURITY_MANAGER, securityManager);
++ }
++
++ //check if the property is managed by security manager
++ if (!securityManager.setLimit(name, XMLSecurityManager.State.APIPROPERTY, value)) {
++ //fall back to the default configuration to handle the property
++ super.setProperty(name, value);
++ }
++ }
+ } // class SAXParser
+diff -r efb24af909a0 -r 05c35de6d704 drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/util/SecurityManager.java
+--- /dev/null Thu Jan 01 00:00:00 1970 +0000
++++ jaxp/drop_included/jaxp_src/src/com/sun/org/apache/xerces/internal/util/SecurityManager.java Tue Oct 29 08:19:21 2013 +0000
+@@ -0,0 +1,215 @@
++/*
++ * reserved comment block
++ * DO NOT REMOVE OR ALTER!
++ */
++/*
++ * The Apache Software License, Version 1.1
++ *
++ *
++ * Copyright (c) 2003 The Apache Software Foundation.
++ * All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ *
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions and the following disclaimer.
++ *
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in
++ * the documentation and/or other materials provided with the
++ * distribution.
++ *
++ * 3. The end-user documentation included with the redistribution,
++ * if any, must include the following acknowledgment:
++ * "This product includes software developed by the
++ * Apache Software Foundation (http://www.apache.org/)."
++ * Alternately, this acknowledgment may appear in the software itself,
++ * if and wherever such third-party acknowledgments normally appear.
++ *
++ * 4. The names "Xerces" and "Apache Software Foundation" must
++ * not be used to endorse or promote products derived from this
++ * software without prior written permission. For written
++ * permission, please contact apache@apache.org.
++ *
++ * 5. Products derived from this software may not be called "Apache",
++ * nor may "Apache" appear in their name, without prior written
++ * permission of the Apache Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
++ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
++ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
++ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
++ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
++ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
++ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
++ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
++ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
++ * SUCH DAMAGE.
++ * ====================================================================
++ *
++ * This software consists of voluntary contributions made by many
++ * individuals on behalf of the Apache Software Foundation and was
++ * originally based on software copyright (c) 1999, International
++ * Business Machines, Inc., http://www.apache.org. For more
++ * information on the Apache Software Foundation, please see
++ * <http://www.apache.org/>.
++ */
++
++package com.sun.org.apache.xerces.internal.util;
++import com.sun.org.apache.xerces.internal.impl.Constants;
++/**
++ * This class is a container for parser settings that relate to
++ * security, or more specifically, it is intended to be used to prevent denial-of-service
++ * attacks from being launched against a system running Xerces.
++ * Any component that is aware of a denial-of-service attack that can arise
++ * from its processing of a certain kind of document may query its Component Manager
++ * for the property (http://apache.org/xml/properties/security-manager)
++ * whose value will be an instance of this class.
++ * If no value has been set for the property, the component should proceed in the "usual" (spec-compliant)
++ * manner. If a value has been set, then it must be the case that the component in
++ * question needs to know what method of this class to query. This class
++ * will provide defaults for all known security issues, but will also provide
++ * setters so that those values can be tailored by applications that care.
++ *
++ * @author Neil Graham, IBM
++ *
++ */
++public final class SecurityManager {
++
++ //
++ // Constants
++ //
++
++ // default value for entity expansion limit
++ private final static int DEFAULT_ENTITY_EXPANSION_LIMIT = 64000;
++
++ /** Default value of number of nodes created. **/
++ private final static int DEFAULT_MAX_OCCUR_NODE_LIMIT = 5000;
++
++ //
++ // Data
++ //
++
++ private final static int DEFAULT_ELEMENT_ATTRIBUTE_LIMIT = 10000;
++
++ /** Entity expansion limit. **/
++ private int entityExpansionLimit;
++
++ /** W3C XML Schema maxOccurs limit. **/
++ private int maxOccurLimit;
++
++ private int fElementAttributeLimit;
++ // default constructor. Establishes default values for
++ // all known security holes.
++ /**
++ * Default constructor. Establishes default values
++ * for known security vulnerabilities.
++ */
++ public SecurityManager() {
++ entityExpansionLimit = DEFAULT_ENTITY_EXPANSION_LIMIT;
++ maxOccurLimit = DEFAULT_MAX_OCCUR_NODE_LIMIT ;
++ fElementAttributeLimit = DEFAULT_ELEMENT_ATTRIBUTE_LIMIT;
++ //We are reading system properties only once ,
++ //at the time of creation of this object ,
++ readSystemProperties();
++ }
++
++ /**
++ * <p>Sets the number of entity expansions that the
++ * parser should permit in a document.</p>
++ *
++ * @param limit the number of entity expansions
++ * permitted in a document
++ */
++ public void setEntityExpansionLimit(int limit) {
++ entityExpansionLimit = limit;
++ }
++
++ /**
++ * <p>Returns the number of entity expansions
++ * that the parser permits in a document.</p>
++ *
++ * @return the number of entity expansions
++ * permitted in a document
++ */
++ public int getEntityExpansionLimit() {
++ return entityExpansionLimit;
++ }
++
++ /**
++ * <p>Sets the limit of the number of content model nodes
++ * that may be created when building a grammar for a W3C
++ * XML Schema that contains maxOccurs attributes with values
++ * other than "unbounded".</p>
++ *
++ * @param limit the maximum value for maxOccurs other
++ * than "unbounded"
++ */
++ public void setMaxOccurNodeLimit(int limit){
++ maxOccurLimit = limit;
++ }
++
++ /**
++ * <p>Returns the limit of the number of content model nodes
++ * that may be created when building a grammar for a W3C
++ * XML Schema that contains maxOccurs attributes with values
++ * other than "unbounded".</p>
++ *
++ * @return the maximum value for maxOccurs other
++ * than "unbounded"
++ */
++ public int getMaxOccurNodeLimit(){
++ return maxOccurLimit;
++ }
++
++ public int getElementAttrLimit(){
++ return fElementAttributeLimit;
++ }
++
++ public void setElementAttrLimit(int limit){
++ fElementAttributeLimit = limit;
++ }
++
++ private void readSystemProperties(){
++
++ try {
++ String value = System.getProperty(Constants.ENTITY_EXPANSION_LIMIT);
++ if(value != null && !value.equals("")){
++ entityExpansionLimit = Integer.parseInt(value);
++ if (entityExpansionLimit < 0)
++ entityExpansionLimit = DEFAULT_ENTITY_EXPANSION_LIMIT;
++ }
++ else
++ entityExpansionLimit = DEFAULT_ENTITY_EXPANSION_LIMIT;
++ }catch(Exception ex){}
++
++ try {
++ String value = System.getProperty(Constants.MAX_OCCUR_LIMIT);
++ if(value != null && !value.equals("")){
++ maxOccurLimit = Integer.parseInt(value);
++ if (maxOccurLimit < 0)
++ maxOccurLimit = DEFAULT_MAX_OCCUR_NODE_LIMIT;
++ }
++ else
++ maxOccurLimit = DEFAULT_MAX_OCCUR_NODE_LIMIT;
++ }catch(Exception ex){}
++
++ try {
++ String value = System.getProperty(Constants.ELEMENT_ATTRIBUTE_LIMIT);
++ if(value != null && !value.equals("")){
++ fElementAttributeLimit = Integer.parseInt(value);
++ if ( fElementAttributeLimit < 0)
++ fElementAttributeLimit = DEFAULT_ELEMENT_ATTRIBUTE_LIMIT;
++ }
++ else
++ fElementAttributeLimit = DEFAULT_ELEMENT_ATTRIBUTE_LIMIT;
++
++ }catch(Exception ex){}
++
++ }
++
++} // class SecurityManager