[ http://nagoya.apache.org/jira/browse/XERCESC-1128?page=history ]

Alberto Massari updated XERCESC-1128:
-------------------------------------

    Priority: Major

> Bad isEmpty argument for the advanced startElement() event
> ----------------------------------------------------------
>
>          Key: XERCESC-1128
>          URL: http://nagoya.apache.org/jira/browse/XERCESC-1128
>      Project: Xerces-C++
>         Type: Bug
>   Components: SAX/SAX2
>     Versions: 2.4.0
>  Environment: Operating System: Linux
> Platform: PC
>     Reporter: Jacques Legare
>     Assignee: Xerces-C Developers Mailing List

>
> The SAX2 advanced startElement event should be passed an argument isEmpty=true
> if the element is empty (like <a/>). But false is passed instead.
> Another problem is that, for empty elements, the startElement/endElement event
> pair for the "plain" handler and the startElement for the advanced handler are
> misaligned. For nonempty elements the ordering of events is
> plainStart;advancedStart;plainEnd;advancedEnd and for empty elements it's
> plainStart;plainEnd;advancedStart. This ordering makes it impossible to use the
> combination advanced startElement / plain endElement.
> Here's a patch against the Xerces release 2.4 that fixes the two problems:
> ==== xerces-c-src2_4_0/src/xercesc/internal/IGXMLScanner.cpp#2 (text) ====
>  
> 2776c2776
> <             , false
> ---
> >             , isEmpty
> 2911c2911
> <         if (fDocHandler)
> ---
> >         if (!isEmpty && fDocHandler)
>  
> ==== xerces-c-src2_4_0/src/xercesc/internal/WFXMLScanner.cpp#2 (text) ====
>  
> 1536c1536
> <             , false
> ---
> >             , isEmpty
>  
> ==== xerces-c-src2_4_0/src/xercesc/parsers/SAX2XMLReaderImpl.cpp#2 (text) ====
>  
> 965,967c965,968
> <     // Bump the element depth counter if not empty
> <     if (!isEmpty)
> <         fElemDepth++;
> ---
> >     XMLBufBid elemQName( &fStringBuffers ) ;
> >
> >     // Bump the element depth counter
> >     fElemDepth++;
> 971d971
> <         XMLBufBid elemQName( &fStringBuffers ) ;
> 1042,1071d1041
> <
> <
> <         // If its empty, send the end tag event now
> <         if (isEmpty)
> <         {
> <             // call endPrefixMapping appropriately.
> <             if (getDoNamespaces())
> <             {
> <                 fDocHandler->endElement
> <                 (
> <                     fScanner->getURIText(elemURLId)
> <                     , elemDecl.getBaseName()
> <                     , elemQName.getRawBuffer()
> <                 );
> <
> <                 unsigned int numPrefix = fPrefixCounts->pop();
> <                 for (unsigned int i = 0; i < numPrefix; ++i)
> <                 {
> <                     XMLBuffer * buf = fPrefixes->pop() ;
> <                     fDocHandler->endPrefixMapping( buf->getRawBuffer() );
> <                     fStringBuffers.releaseBuffer(*buf) ;
> <                 }
> <             }
> <             else
> <             {
> <                 fDocHandler->endElement(XMLUni::fgZeroLenString,
> <                                 elemDecl.getBaseName(),
> <                                 elemDecl.getFullName());
> <             }
> <         }
> 1090a1061,1089
> >
> >     // If its empty, send the end tag event now
> >     if (fDocHandler && isEmpty)
> >     {
> >        // call endPrefixMapping appropriately.
> >        if (getDoNamespaces())
> >        {
> >           fDocHandler->endElement
> >              (
> >               fScanner->getURIText(elemURLId)
> >               , elemDecl.getBaseName()
> >               , elemQName.getRawBuffer()
> >               );
> >
> >           unsigned int numPrefix = fPrefixCounts->pop();
> >           for (unsigned int i = 0; i < numPrefix; ++i)
> >           {
> >              XMLBuffer * buf = fPrefixes->pop() ;
> >              fDocHandler->endPrefixMapping( buf->getRawBuffer() );
> >              fStringBuffers.releaseBuffer(*buf) ;
> >           }
> >        }
> >        else
> >        {
> >           fDocHandler->endElement(XMLUni::fgZeroLenString,
> >                                   elemDecl.getBaseName(),
> >                                   elemDecl.getFullName());
> >        }
> >     }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://nagoya.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


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

Reply via email to