knoaman     2002/12/10 08:36:48

  Modified:    c/src/xercesc/validators/schema TraverseSchema.hpp
                        TraverseSchema.cpp
  Log:
  Schema Errata E1-20.
  
  Revision  Changes    Path
  1.17      +3 -2      xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp
  
  Index: TraverseSchema.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.hpp,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- TraverseSchema.hpp        4 Nov 2002 14:49:42 -0000       1.16
  +++ TraverseSchema.hpp        10 Dec 2002 16:36:48 -0000      1.17
  @@ -755,6 +755,7 @@
       ValueVectorOf<unsigned int>*                   fCurrentGroupStack;
       ValueVectorOf<unsigned int>*                   fIC_NamespaceDepth;
       ValueVectorOf<SchemaElementDecl*>*             fIC_Elements;
  +    ValueVectorOf<const DOMElement*>*              fDeclStack;
       GeneralAttributeCheck                          fAttributeCheck;
       RefHash2KeysTableOf<XMLCh>*                    fGlobalDeclarations;
       RefHash2KeysTableOf<XMLCh>*                    fNotationRegistry;
  @@ -762,7 +763,7 @@
       RefHash2KeysTableOf<IdentityConstraint>*       fIdentityConstraintNames;
       RefHash2KeysTableOf<SchemaElementDecl>*        fSubstitutionGroups;
       RefHash2KeysTableOf<ElemVector>*               fValidSubstitutionGroups;
  -    RefHashTableOf<ValueVectorOf<DOMElement*> >* fIC_NodeListNS;
  +    RefHashTableOf<ValueVectorOf<DOMElement*> >*   fIC_NodeListNS;
       RefHashTableOf<ElemVector>*                    fIC_ElementsNS;
       RefHashTableOf<ValueVectorOf<unsigned int> >*  fIC_NamespaceDepthNS;
       XSDDOMParser*                                  fParser;
  
  
  
  1.38      +18 -13    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.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- TraverseSchema.cpp        10 Dec 2002 02:15:56 -0000      1.37
  +++ TraverseSchema.cpp        10 Dec 2002 16:36:48 -0000      1.38
  @@ -215,6 +215,7 @@
       , fCurrentGroupStack(0)
       , fIC_NamespaceDepth(0)
       , fIC_Elements(0)
  +    , fDeclStack(0)
       , fGlobalDeclarations(0)
       , fNotationRegistry(0)
       , fRedefineComponents(0)
  @@ -1489,7 +1490,7 @@
       XercesAttGroupInfo* saveAttGroupInfo = fCurrentAttGroupInfo;
       XercesAttGroupInfo* attGroupInfo = new XercesAttGroupInfo();
   
  -    fAttGroupRegistry->put((void*) 
fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo);
  +    fDeclStack->addElement(elem);
       fCurrentAttGroupInfo = attGroupInfo;
   
       for (; content !=0; content = XUtil::getNextSiblingElement(content)) {
  @@ -1525,8 +1526,14 @@
       }
   
       // ------------------------------------------------------------------
  +    // Pop declaration
  +    // ------------------------------------------------------------------
  +    fDeclStack->removeElementAt(fDeclStack->size() - 1);
  +
  +    // ------------------------------------------------------------------
       // Restore old attGroupInfo
       // ------------------------------------------------------------------
  +    fAttGroupRegistry->put((void*) 
fStringPool->getValueForId(fStringPool->addOrFind(name)), attGroupInfo);
       fCurrentAttGroupInfo = saveAttGroupInfo;
   
       // ------------------------------------------------------------------
  @@ -6482,17 +6489,6 @@
       }
       else {
   
  -        // circular check
  -        DOMNode* parentElem = elem->getParentNode();
  -
  -        if (XMLString::equals(parentElem->getLocalName(), 
SchemaSymbols::fgELT_ATTRIBUTEGROUP)
  -            && XMLString::equals(((DOMElement*) 
parentElem)->getAttribute(SchemaSymbols::fgATT_NAME), localPart)
  -            && !XMLString::equals(parentElem->getParentNode()->getLocalName(), 
SchemaSymbols::fgELT_REDEFINE)) {
  -
  -            reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::NoCircularAttGroup);
  -            return 0;
  -        }
  -
           attGroupInfo = fAttGroupRegistry->get(localPart);
       }
   
  @@ -6504,6 +6500,13 @@
   
           if (attGroupElem != 0) {
   
  +            // circular attribute check
  +            if (fDeclStack->containsElement(attGroupElem)) {
  +
  +                reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::NoCircularDefinition, refName);
  +                return 0;
  +            }
  +
               attGroupInfo = traverseAttributeGroupDecl(attGroupElem, typeInfo, true);
   
               if (attGroupInfo && fCurrentAttGroupInfo) {
  @@ -7718,6 +7721,7 @@
       fSchemaInfoList = new RefHash2KeysTableOf<SchemaInfo>(29);
       fPreprocessedNodes = new RefHashTableOf<SchemaInfo>(29, false, new HashPtr());
       fLocator = new XSDLocator();
  +    fDeclStack = new ValueVectorOf<const DOMElement*>(16);
   }
   
   void TraverseSchema::cleanUp() {
  @@ -7730,6 +7734,7 @@
       delete fRedefineComponents;
       delete fIdentityConstraintNames;
       delete fSubstitutionGroups;
  +    delete fDeclStack;
       delete fIC_ElementsNS;
       delete fIC_NamespaceDepthNS;
       delete fIC_NodeListNS;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to