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]