cargilld 2004/04/22 03:47:23
Modified: c/src/xercesc/validators/schema TraverseSchema.cpp
Log:
Fix bug where if a group is redefined in an invalid manner, the presence of another
group referring to the redefined group may prevent the parser from generating an error.
Revision Changes Path
1.113 +30 -3 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.112
retrieving revision 1.113
diff -u -r1.112 -r1.113
--- TraverseSchema.cpp 2 Apr 2004 16:51:45 -0000 1.112
+++ TraverseSchema.cpp 22 Apr 2004 10:47:21 -0000 1.113
@@ -1607,9 +1607,36 @@
unsigned int rdfNameIndex =
fStringPool->addOrFind(fBuffer.getRawBuffer());
if (fCurrentGroupStack->containsElement(rdfNameIndex))
- reportSchemaError(elem, XMLUni::fgXMLErrDomain,
XMLErrs::NoCircularDefinition, name);
+ {
+ reportSchemaError(aLocator, XMLUni::fgXMLErrDomain,
XMLErrs::NoCircularDefinition, name);
+ }
else
-
groupInfo->setBaseGroup(fGroupRegistry->get(fBuffer.getRawBuffer()));
+ {
+ XercesGroupInfo* baseGroup =
fGroupRegistry->get(fBuffer.getRawBuffer());
+ if (baseGroup)
+ {
+ groupInfo->setBaseGroup(baseGroup);
+ }
+ else
+ {
+ fBuffer.set(name);
+ fBuffer.append(SchemaSymbols::fgRedefIdentifier);
+ SchemaInfo* saveInfo = fSchemaInfo;
+ DOMElement* groupElem =
fSchemaInfo->getTopLevelComponent(SchemaInfo::C_Group,
+ SchemaSymbols::fgELT_GROUP, fBuffer.getRawBuffer(),
&fSchemaInfo);
+
+ if (groupElem != 0) {
+ baseGroup = traverseGroupDecl(groupElem);
+ groupInfo->setBaseGroup(baseGroup);
+ fSchemaInfo = saveInfo;
+ }
+ else
+ {
+ reportSchemaError(aLocator, XMLUni::fgXMLErrDomain,
XMLErrs::DeclarationNotFound,
+ SchemaSymbols::fgELT_GROUP, fTargetNSURIString,
fBuffer.getRawBuffer());
+ }
+ }
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]