Re: [xml] Memory leaks

My bad, true it was a use-after-free error. I was expecting
xmlUnlinkNode to totally unlink it, included removing the reference to
the document.

I have fixed it with:

    xmlSetTreeDoc (msg, NULL);

Thank you very much :)

2014-08-25 12:31 GMT+02:00 Nick Wellnhofer <wellnhofer aevum de>:
On 25/08/2014 11:33, Iñigo Martínez wrote:


I have been looking at the memory usage of my programs using libxml2 y
using valgrind, and I have seen these messages:

==22134== Invalid read of size 8
==22134==    at 0x519482F: xmlFreeNode (in
==22134==    by 0x400A02: main (test-command.c:51)
==22134==  Address 0x7715ef8 is 152 bytes inside a block of size 176
==22134==    at 0x4C29730: free (in
==22134==    by 0x5194391: xmlFreeDoc (in
==22134==    by 0x54A4BBD: xml_msg_get_msg (xml-message.c:111)
==22134==    by 0x4009CA: main (test-command.c:44)

This is not a memory leak but a use-after-free error.

These messages correspond to this code:

xml-message.c 111

     xml_msg_get_msg (const char *str) {
         xmlDoc *doc;
         xmlNodePtr msg;

         if (!(doc = xmlRecoverDoc (BAD_CAST str)))
             return NULL;

         msg = xmlDocGetRootElement (doc);
         xmlUnlinkNode (msg);
         xmlFreeDoc (doc);

         return msg;

test-command.c 44 and 51

     xmlNodePtr node;
     node = xml_msg_get_msg ("<Command Timestamp=\"0\"
ReceptionTimeStamp=\"0\" Sender=\"P1\"
     xmlFreeNode (node);

Any idea on why I'm leaking memory ?

If you unlink a node, it still keeps a pointer to the original document's
dictionary (interned string table). So you shouldn't free the document until
you finished processing the node. Alternatively, you could copy the node to
another (dummy) document.


xml mailing list, project page
xml gnome org

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]