On 4/10/2014 16:20, Bart De Schuymer wrote:
Hello,
We tried using libxml2 configured with the --with-fexceptions option
and have identified a memory leak when our C++ startElement callback
throws an exception.
The cause of the leak is as follows:
xmlParseStartTag frees all attribute values after calling the
startElement callback, but since an exception is thrown in the
callback, this cleanup code isn't executed.
xmlFreeParserCtxt only frees ctxt->atts: it doesn't try to free any
leftover attribute values.
We tried to patch libxml2 to fix this issue but ran into errors when
running make valgrind ("Memory tag error occurs"). So we decided to
catch the exceptions in our callback instead which effectively
prevents the memory leak from occurring.
Yes, you should handle that on your side. libxml2 is a C library, so you
can't handle cpp features in it, you could try of course to maintain
your own version of libxml2 extended with exception handler wrappers for
all callbacks you need, but it's a strange thing to do.
We hope this issue will be fixed by someone with a deeper knowledge of
libxml's design.
Best regards,
Bart
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml
_______________________________________________
xml mailing list, project page http://xmlsoft.org/
xml@gnome.org
https://mail.gnome.org/mailman/listinfo/xml