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]