retitle 469809 Possible memory leak in Document::Init
forwarded 469809 http://bugzilla.gnome.org/show_bug.cgi?id=501168
tag 469809 + confirmed
thanks

I can confirm the leakage in class xmlpp::Document::Init.  But the one
in xmlpp::DomParser::parse_file() seems already fixed in newer version.

I've made a patch to fix xmlpp::Document::Init from leaking.  Please
find it in attachment and test.  Thanks.

Deng Xiyue

diff -urN libxml++-2.20.0/libxml++/document.cc libxml++-2.20.0~/libxml++/document.cc
--- libxml++-2.20.0/libxml++/document.cc	2007-08-29 16:22:51.000000000 +0800
+++ libxml++-2.20.0~/libxml++/document.cc	2008-03-07 16:51:17.000000000 +0800
@@ -137,11 +137,16 @@
 
 Document::Init::Init()
 {
-   xmlInitParser(); //Not always necessary, but necessary for thread safety.
-   xmlRegisterNodeDefault(on_libxml_construct);
-   xmlDeregisterNodeDefault(on_libxml_destruct);
-   xmlThrDefRegisterNodeDefault(on_libxml_construct);
-   xmlThrDefDeregisterNodeDefault(on_libxml_destruct);
+  xmlInitParser(); //Not always necessary, but necessary for thread safety.
+  xmlRegisterNodeDefault(on_libxml_construct);
+  xmlDeregisterNodeDefault(on_libxml_destruct);
+  xmlThrDefRegisterNodeDefault(on_libxml_construct);
+  xmlThrDefDeregisterNodeDefault(on_libxml_destruct);
+}
+
+Document::Init::~Init()
+{
+  xmlCleanupParser(); //as per xmlInitParser(), or memory leak will happen.
 }
 
 Document::Init Document::init_;
diff -urN libxml++-2.20.0/libxml++/document.h libxml++-2.20.0~/libxml++/document.h
--- libxml++-2.20.0/libxml++/document.h	2007-09-11 16:11:24.000000000 +0800
+++ libxml++-2.20.0~/libxml++/document.h	2008-03-07 17:10:31.000000000 +0800
@@ -53,6 +53,7 @@
   {
   public:
     Init();
+    virtual ~Init();
   };
 
   friend class DomParser;

Reply via email to