Author: amassari
Date: Mon Apr 23 14:24:41 2012
New Revision: 1329252

URL: http://svn.apache.org/viewvc?rev=1329252&view=rev
Log:
Fixed memory leak when reporting an error for XInclude (XERCESC-1962)

Modified:
    xerces/c/trunk/src/xercesc/util/XMLInitializer.hpp
    xerces/c/trunk/src/xercesc/xinclude/XIncludeUtils.cpp

Modified: xerces/c/trunk/src/xercesc/util/XMLInitializer.hpp
URL: 
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/util/XMLInitializer.hpp?rev=1329252&r1=1329251&r2=1329252&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/XMLInitializer.hpp (original)
+++ xerces/c/trunk/src/xercesc/util/XMLInitializer.hpp Mon Apr 23 14:24:41 2012
@@ -106,6 +106,9 @@ private:
     static void initializeDOMNodeListImpl();
     static void initializeDOMNormalizer();
 
+    // XInclude
+    //
+    static void initializeXInclude();
 
     //
     // Terminate
@@ -143,6 +146,10 @@ private:
     static void terminateDOMNodeListImpl();
     static void terminateDOMNormalizer();
 
+    // XInclude
+    //
+    static void terminateXInclude();
+
     //
     // Extra initialization.
     //

Modified: xerces/c/trunk/src/xercesc/xinclude/XIncludeUtils.cpp
URL: 
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/xinclude/XIncludeUtils.cpp?rev=1329252&r1=1329251&r2=1329252&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/xinclude/XIncludeUtils.cpp (original)
+++ xerces/c/trunk/src/xercesc/xinclude/XIncludeUtils.cpp Mon Apr 23 14:24:41 
2012
@@ -28,6 +28,7 @@
 #include <xercesc/util/XMLResourceIdentifier.hpp>
 #include <xercesc/util/BinInputStream.hpp>
 #include <xercesc/util/OutOfMemoryException.hpp>
+#include <xercesc/util/XMLInitializer.hpp>
 #include <xercesc/internal/XMLInternalErrorHandler.hpp>
 #include <xercesc/parsers/XercesDOMParser.hpp>
 #include <xercesc/sax/InputSource.hpp>
@@ -35,6 +36,29 @@
 
 XERCES_CPP_NAMESPACE_BEGIN
 
+// ---------------------------------------------------------------------------
+//  Local static data
+// ---------------------------------------------------------------------------
+static XMLMsgLoader*   gMsgLoader = 0;
+
+void XMLInitializer::initializeXInclude()
+{
+    gMsgLoader = XMLPlatformUtils::loadMsgSet(XMLUni::fgXMLErrDomain);
+
+    if (!gMsgLoader)
+      XMLPlatformUtils::panic(PanicHandler::Panic_CantLoadMsgDomain);
+}
+
+void XMLInitializer::terminateXInclude()
+{
+    delete gMsgLoader;
+    gMsgLoader = 0;
+}
+
+// ---------------------------------------------------------------------------
+//  XIncludeUtils: Constructors and Destructor
+// ---------------------------------------------------------------------------
+
 XIncludeUtils::XIncludeUtils(XMLErrorReporter *errorReporter){
     fErrorReporter = errorReporter;
     fIncludeHistoryHead = NULL;
@@ -747,22 +771,20 @@ XIncludeUtils::reportError(const DOMNode
         const XMLSize_t msgSize = 1023;
         XMLCh errText[msgSize + 1];
 
-        /* TODO - investigate whether this is complete */
-        XMLMsgLoader  *errMsgLoader = 
XMLPlatformUtils::loadMsgSet(XMLUni::fgXMLErrDomain);
         if (errorMsg == NULL){
-            if (errMsgLoader->loadMsg(errorType, errText, msgSize))
+            if (gMsgLoader->loadMsg(errorType, errText, msgSize))
             {
                     // <TBD> Probably should load a default msg here
             }
         } else {
-            if (errMsgLoader->loadMsg(errorType, errText, msgSize, errorMsg))
+            if (gMsgLoader->loadMsg(errorType, errText, msgSize, errorMsg))
             {
                     // <TBD> Probably should load a default msg here
             }
         }
 
         fErrorReporter->error(errorType
-                              , XMLUni::fgXMLErrDomain    //fgXMLErrDomain
+                              , XMLUni::fgXMLErrDomain
                               , XMLErrs::errorType(errorType)
                               , errText
                               , systemId



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to