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]

Reply via email to