You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xerces.apache.org by mr...@apache.org on 2007/01/12 22:48:01 UTC
svn commit: r495747 - in /xerces/java/trunk/src/org/apache/xerces/impl:
XML11NSDocumentScannerImpl.java XMLDTDScannerImpl.java
XMLDocumentFragmentScannerImpl.java XMLDocumentScannerImpl.java
XMLEntityManager.java XMLNSDocumentScannerImpl.java
Author: mrglavas
Date: Fri Jan 12 13:48:00 2007
New Revision: 495747
URL: http://svn.apache.org/viewvc?view=rev&rev=495747
Log:
Fixing JIRA Issue #1221:
http://issues.apache.org/jira/browse/XERCESJ-1221
E13 [1] of the XML 1.0 3rd edition errata clarifies that even internal parameter entity references
are enough to make undeclared entities into mere validity errors rather than well-formedness errors.
Xerces was reporting a fatal error for undeclared entities in a document containing any parameter
entities (not just internal ones). This should be fixed now.
[1] http://www.w3.org/XML/xml-V10-3e-errata#E13
Modified:
xerces/java/trunk/src/org/apache/xerces/impl/XML11NSDocumentScannerImpl.java
xerces/java/trunk/src/org/apache/xerces/impl/XMLDTDScannerImpl.java
xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java
xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java
xerces/java/trunk/src/org/apache/xerces/impl/XMLEntityManager.java
xerces/java/trunk/src/org/apache/xerces/impl/XMLNSDocumentScannerImpl.java
Modified: xerces/java/trunk/src/org/apache/xerces/impl/XML11NSDocumentScannerImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/XML11NSDocumentScannerImpl.java?view=diff&rev=495747&r1=495746&r2=495747
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/XML11NSDocumentScannerImpl.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/XML11NSDocumentScannerImpl.java Fri Jan 12 13:48:00 2007
@@ -591,12 +591,9 @@
}
}
- //REVISIT: one more case needs to be included: external PE and standalone is no
- boolean isVC = fHasExternalDTD && !fStandalone;
-
// Scan attribute value and return true if the non-normalized and normalized value are the same
boolean isSameNormalizedAttr = scanAttributeValue(this.fTempString, fTempString2,
- fAttributeQName.rawname,isVC,fCurrentElement.rawname);
+ fAttributeQName.rawname, fIsEntityDeclaredVC, fCurrentElement.rawname);
String value = fTempString.toString();
attributes.setValue(attrIndex, value);
Modified: xerces/java/trunk/src/org/apache/xerces/impl/XMLDTDScannerImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/XMLDTDScannerImpl.java?view=diff&rev=495747&r1=495746&r2=495747
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/XMLDTDScannerImpl.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/XMLDTDScannerImpl.java Fri Jan 12 13:48:00 2007
@@ -136,8 +136,8 @@
/** Seen external DTD. */
protected boolean fSeenExternalDTD;
- /** Seen external parameter entity. */
- protected boolean fSeenExternalPE;
+ /** Seen a parameter entity reference. */
+ protected boolean fSeenPEReferences;
// private data
@@ -635,6 +635,10 @@
throws IOException, XNIException {
int depth = fPEDepth;
String pName = "%"+name;
+ if (!fSeenPEReferences) {
+ fSeenPEReferences = true;
+ fEntityManager.notifyHasPEReferences();
+ }
if (fValidation && !fEntityManager.isDeclaredEntity(pName)) {
fErrorReporter.reportError( XMLMessageFormatter.XML_DOMAIN,"EntityNotDeclared",
new Object[]{name}, XMLErrorReporter.SEVERITY_ERROR);
@@ -1359,7 +1363,7 @@
}
}
// AttValue
- boolean isVC = !fStandalone && (fSeenExternalDTD || fSeenExternalPE) ;
+ boolean isVC = !fStandalone && (fSeenExternalDTD || fSeenPEReferences);
scanAttributeValue(defaultVal, nonNormalizedDefaultVal, atName, isVC, elName);
}
return defaultType;
@@ -1485,10 +1489,6 @@
String systemId = fStrings[0];
String publicId = fStrings[1];
- if (isPEDecl && systemId != null) {
- fSeenExternalPE = true;
- }
-
String notation = null;
// NDATA
boolean sawSpace = skipSeparator(true, !scanningInternalSubset());
@@ -2107,7 +2107,7 @@
fStandalone = false;
fSeenExternalDTD = false;
- fSeenExternalPE = false;
+ fSeenPEReferences = false;
// set starting state
setScannerState(SCANNER_STATE_TEXT_DECL);
Modified: xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java?view=diff&rev=495747&r1=495746&r2=495747
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentFragmentScannerImpl.java Fri Jan 12 13:48:00 2007
@@ -197,6 +197,9 @@
/** Standalone. */
protected boolean fStandalone;
+ /** True if [Entity Declared] is a VC; false if it is a WFC. */
+ protected boolean fIsEntityDeclaredVC;
+
/** External subset resolver. **/
protected ExternalSubsetResolver fExternalSubsetResolver;
@@ -366,6 +369,7 @@
fElementStack.clear();
fHasExternalDTD = false;
fStandalone = false;
+ fIsEntityDeclaredVC = false;
fInScanContent = false;
// setup dispatcher
@@ -975,13 +979,11 @@
reportFatalError("AttributeNotUnique",
new Object[]{fCurrentElement.rawname,
fAttributeQName.rawname});
- }
- //REVISIT: one more case needs to be included: external PE and standalone is no
- boolean isVC = fHasExternalDTD && !fStandalone;
+ }
// Scan attribute value and return true if the un-normalized and normalized value are the same
boolean isSameNormalizedAttr = scanAttributeValue(fTempString, fTempString2,
- fAttributeQName.rawname, isVC, fCurrentElement.rawname);
+ fAttributeQName.rawname, fIsEntityDeclaredVC, fCurrentElement.rawname);
attributes.setValue(attrIndex, fTempString.toString());
// If the non-normalized and normalized value are the same, avoid creating a new string.
@@ -1281,14 +1283,14 @@
}
else {
if (!fEntityManager.isDeclaredEntity(name)) {
- //REVISIT: one more case needs to be included: external PE and standalone is no
- if ( fHasExternalDTD && !fStandalone) {
+ if (fIsEntityDeclaredVC) {
if (fValidation)
fErrorReporter.reportError( XMLMessageFormatter.XML_DOMAIN,"EntityNotDeclared",
new Object[]{name}, XMLErrorReporter.SEVERITY_ERROR);
}
- else
+ else {
reportFatalError("EntityNotDeclared", new Object[]{name});
+ }
}
fEntityManager.startEntity(name, false);
}
Modified: xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java?view=diff&rev=495747&r1=495746&r2=495747
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/XMLDocumentScannerImpl.java Fri Jan 12 13:48:00 2007
@@ -829,6 +829,7 @@
// handle external subset
if (fDoctypeSystemId != null) {
+ fIsEntityDeclaredVC = !fStandalone;
if (((fValidation || fLoadExternalDTD)
&& (fValidationManager == null || !fValidationManager.isCachedDTD()))) {
setScannerState(SCANNER_STATE_DTD_EXTERNAL);
@@ -837,6 +838,7 @@
}
}
else if (fExternalSubsetSource != null) {
+ fIsEntityDeclaredVC = !fStandalone;
if (((fValidation || fLoadExternalDTD)
&& (fValidationManager == null || !fValidationManager.isCachedDTD()))) {
// This handles the case of a DOCTYPE that had neither an internal subset or an external subset.
@@ -952,12 +954,14 @@
// scan external subset next
if (fDoctypeSystemId != null) {
+ fIsEntityDeclaredVC = !fStandalone;
if (readExternalSubset) {
setScannerState(SCANNER_STATE_DTD_EXTERNAL);
break;
}
}
else if (fExternalSubsetSource != null) {
+ fIsEntityDeclaredVC = !fStandalone;
if (readExternalSubset) {
// This handles the case of a DOCTYPE that only had an internal subset.
fDTDScanner.setInputSource(fExternalSubsetSource);
@@ -965,6 +969,11 @@
setScannerState(SCANNER_STATE_DTD_EXTERNAL_DECLS);
break;
}
+ }
+ // This document only has an internal subset. If it contains parameter entity
+ // references and standalone="no" then [Entity Declared] is a validity constraint.
+ else {
+ fIsEntityDeclaredVC = fEntityManager.hasPEReferences() && !fStandalone;
}
// break out of this dispatcher.
Modified: xerces/java/trunk/src/org/apache/xerces/impl/XMLEntityManager.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/XMLEntityManager.java?view=diff&rev=495747&r1=495746&r2=495747
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/XMLEntityManager.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/XMLEntityManager.java Fri Jan 12 13:48:00 2007
@@ -306,6 +306,11 @@
* only be set by the document source (e.g. XMLDocumentScanner).
*/
protected boolean fStandalone;
+
+ /**
+ * True if the current document contains parameter entity references.
+ */
+ protected boolean fHasPEReferences;
// are the entities being parsed in the external subset?
// NOTE: this *is not* the same as whether they're external entities!
@@ -409,6 +414,21 @@
public boolean isStandalone() {
return fStandalone;
} // isStandalone():boolean
+
+ /**
+ * Notifies the entity manager that the current document
+ * being processed contains parameter entity references.
+ */
+ final void notifyHasPEReferences() {
+ fHasPEReferences = true;
+ } // notifyHasPEReferences
+
+ /**
+ * Returns true if the document contains parameter entity references.
+ */
+ final boolean hasPEReferences() {
+ return fHasPEReferences;
+ } // hasPEReferences():boolean
/**
* Sets the entity handler. When an entity starts and ends, the
@@ -1325,6 +1345,7 @@
// initialize state
fStandalone = false;
+ fHasPEReferences = false;
fEntities.clear();
fEntityStack.removeAllElements();
fEntityExpansionCount = 0;
Modified: xerces/java/trunk/src/org/apache/xerces/impl/XMLNSDocumentScannerImpl.java
URL: http://svn.apache.org/viewvc/xerces/java/trunk/src/org/apache/xerces/impl/XMLNSDocumentScannerImpl.java?view=diff&rev=495747&r1=495746&r2=495747
==============================================================================
--- xerces/java/trunk/src/org/apache/xerces/impl/XMLNSDocumentScannerImpl.java (original)
+++ xerces/java/trunk/src/org/apache/xerces/impl/XMLNSDocumentScannerImpl.java Fri Jan 12 13:48:00 2007
@@ -525,12 +525,9 @@
}
}
- //REVISIT: one more case needs to be included: external PE and standalone is no
- boolean isVC = fHasExternalDTD && !fStandalone;
-
// Scan attribute value and return true if the non-normalized and normalized value are the same
boolean isSameNormalizedAttr = scanAttributeValue(this.fTempString, fTempString2,
- fAttributeQName.rawname, isVC, fCurrentElement.rawname);
+ fAttributeQName.rawname, fIsEntityDeclaredVC, fCurrentElement.rawname);
String value = fTempString.toString();
attributes.setValue(attrIndex, value);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xerces.apache.org
For additional commands, e-mail: commits-help@xerces.apache.org