dbertoni    2002/11/16 16:48:06

  Modified:    c/src/XercesParserLiaison XercesParserLiaison.cpp
                        XercesParserLiaison.hpp
  Log:
  Fix for bug 14614.  Removed unnecessary insert of document into map.
  
  Revision  Changes    Path
  1.55      +38 -34    
xml-xalan/c/src/XercesParserLiaison/XercesParserLiaison.cpp
  
  Index: XercesParserLiaison.cpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XercesParserLiaison/XercesParserLiaison.cpp,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- XercesParserLiaison.cpp   14 Nov 2002 23:55:56 -0000      1.54
  +++ XercesParserLiaison.cpp   17 Nov 2002 00:48:06 -0000      1.55
  @@ -10,33 +10,33 @@
    * are met:
    *
    * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer. 
  + *     notice, this list of conditions and the following disclaimer. 
    *
    * 2. Redistributions in binary form must reproduce the above copyright
  - *    notice, this list of conditions and the following disclaimer in
  - *    the documentation and/or other materials provided with the
  - *    distribution.
  + *     notice, this list of conditions and the following disclaimer in
  + *     the documentation and/or other materials provided with the
  + *     distribution.
    *
    * 3. The end-user documentation included with the redistribution,
  - *    if any, must include the following acknowledgment:  
  - *       "This product includes software developed by the
  - *        Apache Software Foundation (http://www.apache.org/)."
  - *    Alternately, this acknowledgment may appear in the software itself,
  - *    if and wherever such third-party acknowledgments normally appear.
  + *     if any, must include the following acknowledgment:  
  + *            "This product includes software developed by the
  + *             Apache Software Foundation (http://www.apache.org/)."
  + *     Alternately, this acknowledgment may appear in the software itself,
  + *     if and wherever such third-party acknowledgments normally appear.
    *
    * 4. The names "Xalan" and "Apache Software Foundation" must
  - *    not be used to endorse or promote products derived from this
  - *    software without prior written permission. For written 
  - *    permission, please contact [EMAIL PROTECTED]
  + *     not be used to endorse or promote products derived from this
  + *     software without prior written permission. For written 
  + *     permission, please contact [EMAIL PROTECTED]
    *
    * 5. Products derived from this software may not be called "Apache",
  - *    nor may "Apache" appear in their name, without prior written
  - *    permission of the Apache Software Foundation.
  + *     nor may "Apache" appear in their name, without prior written
  + *     permission of the Apache Software Foundation.
    *
    * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  - * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  + * DISCLAIMED.       IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
    * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  @@ -54,7 +54,6 @@
    * information on the Apache Software Foundation, please see
    * <http://www.apache.org/>.
    */
  -// Class header file.
   #include "XercesParserLiaison.hpp"
   
   
  @@ -156,7 +155,8 @@
                i != m_documentMap.end();
                ++i)
        {
  -             if ((*i).second.m_isDeprecated == false)
  +             if ((*i).second.m_isDeprecated == false &&
  +                     (*i).second.m_isOwned == true)
                {
   #if defined(XALAN_CANNOT_DELETE_CONST)
                        delete 
(DOMDocument*)(*i).second.m_wrapper->getXercesDocument();
  @@ -201,7 +201,7 @@
                        DocumentHandler&                handler,
                        const XalanDOMString&   /* identifier */)
   {
  -     XalanAutoPtr<SAXParser>         theParser(CreateSAXParser());
  +     XalanAutoPtr<SAXParser>         theParser(CreateSAXParser());
   
        theParser->setDocumentHandler(&handler);
   
  @@ -227,7 +227,7 @@
   #if XERCES_VERSION_MAJOR >= 2
        XalanAutoPtr<XercesDOMParser>   theParser(CreateDOMParser());
   #else
  -     XalanAutoPtr<DOMParser>         theParser(CreateDOMParser());
  +     XalanAutoPtr<DOMParser>         theParser(CreateDOMParser());
   #endif
   
        if (m_errorHandler == 0)
  @@ -258,7 +258,7 @@
   
        if (theXercesDocument != 0)
        {
  -             theNewDocument = doCreateDocument(theXercesDocument, 
m_threadSafe, m_buildWrapper);
  +             theNewDocument = doCreateDocument(theXercesDocument, 
m_threadSafe, m_buildWrapper, true);
   
                theParser->adoptDocument();
   #else
  @@ -266,10 +266,8 @@
   
        if (theXercesDocument.isNull() == false)
        {
  -             theNewDocument = doCreateDocument(theXercesDocument, 
m_threadSafe, m_buildBridge);
  +             theNewDocument = doCreateDocument(theXercesDocument, 
m_threadSafe, m_buildBridge, true);
   #endif
  -
  -             m_documentMap[theNewDocument] = theNewDocument;
        }
   
        return theNewDocument;
  @@ -297,7 +295,7 @@
   
   
   void
  -XercesParserLiaison::destroyDocument(XalanDocument*          theDocument)
  +XercesParserLiaison::destroyDocument(XalanDocument*  theDocument)
   {
        if (mapDocument(theDocument) != 0)
        {
  @@ -358,7 +356,7 @@
   
   
   void
  -XercesParserLiaison::setIncludeIgnorableWhitespace(bool      include)
  +XercesParserLiaison::setIncludeIgnorableWhitespace(bool include)
   {
        m_includeIgnorableWhitespace = include;
   }
  @@ -477,7 +475,7 @@
   
   XalanDocument*
   XercesParserLiaison::createDocument(
  -                     const DOM_Document&             theXercesDocument,
  +                     const DOM_Document&     theXercesDocument,
                        bool                                    threadSafe,
                        bool                                    buildBridge)
   {
  @@ -492,7 +490,9 @@
                        bool                            threadSafe,
                        bool                            buildWrapper)
   {
  -     return doCreateDocument(theXercesDocument, threadSafe, buildWrapper);
  +     // As we did not create the underlying DOMDocument - ensure we don't
  +     // delete it later.
  +     return doCreateDocument(theXercesDocument, threadSafe, buildWrapper, 
false);
   }
   
   
  @@ -520,7 +520,7 @@
   
   
   DOM_Document
  -XercesParserLiaison::mapXercesDocument(const XalanDocument*          
theDocument) const
  +XercesParserLiaison::mapXercesDocument(const XalanDocument*  theDocument) 
const
   {
        const DocumentMapType::const_iterator   i =
                m_documentMap.find(theDocument);
  @@ -570,7 +570,7 @@
   
   
   void
  -XercesParserLiaison::error(const SAXParseException&          e)
  +XercesParserLiaison::error(const SAXParseException&  e)
   {
        XalanDOMString  theMessage("Error ");
   
  @@ -627,7 +627,7 @@
   void
   XercesParserLiaison::formatErrorMessage(
                        const SAXParseException&        e,
  -                     XalanDOMString&                         theMessage)
  +                     XalanDOMString&                         theMessage)
   {
        append(theMessage, " at (file ");
   
  @@ -727,11 +727,11 @@
   
   XercesDocumentBridge*
   XercesParserLiaison::doCreateDocument(
  -                     const DOM_Document&             theXercesDocument,
  +                     const DOM_Document&     theXercesDocument,
                        bool                                    threadSafe,
                        bool                                    buildBridge)
   {
  -     XercesDocumentBridge* const             theNewDocument =
  +     XercesDocumentBridge* const     theNewDocument =
                new XercesDocumentBridge(theXercesDocument, threadSafe, 
buildBridge);
   
        m_documentMap[theNewDocument] = theNewDocument;
  @@ -745,12 +745,16 @@
   XercesParserLiaison::doCreateDocument(
                        const DOMDocument*      theXercesDocument,
                        bool                            threadSafe,
  -                     bool                            buildWrapper)
  +                     bool                            buildWrapper,
  +                     bool                            isOwned)
   {
        XercesDocumentWrapper* const            theNewDocument =
                new XercesDocumentWrapper(theXercesDocument, threadSafe, 
buildWrapper);
   
  -     m_documentMap[theNewDocument] = theNewDocument;
  +     DocumentEntry&  theEntry = m_documentMap[theNewDocument];
  +     
  +     theEntry = theNewDocument;
  +     theEntry.m_isOwned = isOwned;
   
        return theNewDocument;
   }
  
  
  
  1.39      +13 -7     
xml-xalan/c/src/XercesParserLiaison/XercesParserLiaison.hpp
  
  Index: XercesParserLiaison.hpp
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/c/src/XercesParserLiaison/XercesParserLiaison.hpp,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- XercesParserLiaison.hpp   3 Oct 2002 07:05:59 -0000       1.38
  +++ XercesParserLiaison.hpp   17 Nov 2002 00:48:06 -0000      1.39
  @@ -359,7 +359,7 @@
         */
        XalanDocument*
        createDocument(
  -                     const DOM_Document&             theXercesDocument,
  +                     const DOM_Document&     theXercesDocument,
                        bool                                    threadSafe,
                        bool                                    buildBridge);
   
  @@ -466,6 +466,7 @@
        struct DocumentEntry
        {
                bool    m_isDeprecated;
  +             bool    m_isOwned;
   
                union
                {
  @@ -474,12 +475,14 @@
                };
   
                DocumentEntry&
  -             operator=(XercesDocumentBridge*         theBridge)
  +             operator=(XercesDocumentBridge*         theBridge)
                {
                        m_isDeprecated = true;
   
                        m_bridge = theBridge;
   
  +                     m_isOwned = true;
  +
                        return *this;
                }
   
  @@ -490,6 +493,8 @@
   
                        m_wrapper = theWrapper;
   
  +                     m_isOwned = true;
  +
                        return *this;
                }
        };
  @@ -500,7 +505,7 @@
                                less<const XalanDocument*> >    DocumentMapType;
   #else
        typedef std::map<const XalanDocument*,
  -                                      DocumentEntry>                         
DocumentMapType;
  +                                      DocumentEntry>                         
DocumentMapType;
   #endif
   
        /**
  @@ -611,7 +616,7 @@
        }
   
   #if XERCES_VERSION_MAJOR >= 2
  -     typedef XercesDOMParser         DOMParserType;
  +     typedef XercesDOMParser         DOMParserType;
   #else
        typedef DOMParser       DOMParserType;
   #endif
  @@ -621,7 +626,7 @@
        static void
        formatErrorMessage(
                        const SAXParseException&        e,
  -                     XalanDOMString&                         theMessage);
  +                     XalanDOMString&                         theMessage);
   
        DOMParserType*
        CreateDOMParser();
  @@ -639,7 +644,7 @@
         */
        XercesDocumentBridge*
        doCreateDocument(
  -                     const DOM_Document&             theXercesDocument,
  +                     const DOM_Document&     theXercesDocument,
                        bool                                    threadSafe,
                        bool                                    buildBridge);
   
  @@ -655,7 +660,8 @@
        doCreateDocument(
                        const DOMDocument*      theXercesDocument,
                        bool                            threadSafe,
  -                     bool                            buildWrapper);
  +                     bool                            buildWrapper,
  +                     bool                            isOwned);
   
   private:
   
  
  
  

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

Reply via email to