amassari 2004/01/15 10:15:24
Modified: c/src/xercesc/validators/schema TraverseSchema.cpp
Log:
Fix for bug#18341; when a type was derived from a type declared in another schema,
the right grammar was not restored, and the type was not found
Revision Changes Path
1.108 +29 -2 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp
Index: TraverseSchema.cpp
===================================================================
RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -r1.107 -r1.108
--- TraverseSchema.cpp 12 Jan 2004 16:15:57 -0000 1.107
+++ TraverseSchema.cpp 15 Jan 2004 18:15:24 -0000 1.108
@@ -4688,7 +4688,32 @@
if (baseValidator == 0) {
+ SchemaInfo::ListType infoType = SchemaInfo::INCLUDE;
SchemaInfo* saveInfo = fSchemaInfo;
+ int saveScope = fCurrentScope;
+
+ if (!XMLString::equals(uri, fTargetNSURIString) && (uri && *uri)) {
+
+ // Make sure that we have an explicit import statement.
+ // Clause 4 of Schema Representation Constraint:
+ // http://www.w3.org/TR/xmlschema-1/#src-resolve
+ unsigned int uriId = fURIStringPool->addOrFind(uri);
+
+ if (!fSchemaInfo->isImportingNS(uriId)) {
+
+ reportSchemaError(elem, XMLUni::fgXMLErrDomain,
XMLErrs::InvalidNSReference, uri);
+ return 0;
+ }
+
+ SchemaInfo* impInfo = fSchemaInfo->getImportInfo(uriId);
+
+ if (!impInfo || impInfo->getProcessed())
+ return 0;
+
+ infoType = SchemaInfo::IMPORT;
+ restoreSchemaInfo(impInfo, infoType);
+ }
+
DOMElement* baseTypeNode =
fSchemaInfo->getTopLevelComponent(SchemaInfo::C_SimpleType,
SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo);
@@ -4697,7 +4722,9 @@
baseValidator = traverseSimpleTypeDecl(baseTypeNode);
// restore schema information, if necessary
- fSchemaInfo = saveInfo;
+ if (saveInfo != fSchemaInfo) {
+ restoreSchemaInfo(saveInfo, infoType, saveScope);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]