Hi Daniel, All, in our Perl bindings, we have something similar to this (we keep compatibility with older releases, that's why we still use the old parser API): xmlParserCtxtPtr ctxt = xmlCreateMemoryParserCtxt((const char*)ptr, len); /* leak here - comment out to get rid of it */ if ( ctxt->input != NULL ) { ctxt->input->filename = xmlStrdup((const xmlChar *) ""); } xmlParseDocument(ctxt); real_doc = ctxt->myDoc; ctxt->myDoc = NULL; xmlFreeParserCtxt(ctxt); return real_doc; Now, the reason we set ctxt->input->filename to "" is that otherwise libxml2 (since 2.6) doesn't return line-numbers on error - we want something like :3: element bar: validity error : No declaration for element bar <bar/> ^ but if we leave filename == NULL, we only get element bar: validity error : No declaration for element bar <bar/> ^ (No problem with this.) But, although ctxt->input->filename _does_ get freed with xmlFreeParserCtxt, the above code leaks. If the line with xmlStrdup is removed, the leak disappears. I suspect, that somewhere, during xmlParseDocument some copies of filename are made but never freed or something similar. Otherwise I don't know why this line would make any difference. BTW, it's the same if I set ctxt->input->filename = ""; and put ctxt->input->filename = NULL; just before xmlFreeParserCtxt(ctxt). Any hints? Thanks, -- Petr
Attachment:
pgpeISeh01zCa.pgp
Description: PGP signature