memory leak with XInclude
-------------------------

                 Key: XERCESC-1962
                 URL: https://issues.apache.org/jira/browse/XERCESC-1962
             Project: Xerces-C++
          Issue Type: Bug
          Components: XInclude
    Affects Versions: 3.1.1
         Environment: Linux Ubuntu 10.10 i386
            Reporter: Paulo Zanoni


When xerces-c++ is parsing files with XInclude, it leaks memory. You can check 
the memory leak by running "valgrind".

This behavior can be reproduced both with the "XInclude" binary and with custom 
code.

All you need to do is:
- create a parser
- set validation scheme to Val_Auto
- setDoNamespaces(true)
- setDoXInclude(true)
- parser.parse("example.xml");

I have tracked the bug. The "actual" leak is inside XIncludeUtils::reportError. 
It uses XMLPlatformUtils::loadMsgSet, which calls loadAMsgSet, which allocates 
memory and returns to its callee (see XMLPlatformUtils::loadAMsgSet inside 
utils/PlatformUtils.cpp). The memory allocated by loadAMsgSet is never freed.

The solution:
In file xinclude/XIncludeUtils.cpp, function XIncludeUtils::reportError, the 
pointer allocated by XMLPlatformUtils::loadMsgSet should be freed. For my 
testings, I just added a "delete erMsgLoader" at the end of the scope, but I am 
not sure this is enough (since I'm not sure if any of the functions between 
loadMsgSet and the end of the scope can throw exceptions). It is up to you, 
developers, find a proper solution =D

I'll attach examples.

I locally tested my patch (I rebuild the Ubuntu package) and it seems to have 
worked, but I didn't test much. I am not familiar with xerces-c code so I'm not 
sure if it can break anything.

Thanks,
Paulo

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscr...@xerces.apache.org
For additional commands, e-mail: c-dev-h...@xerces.apache.org

Reply via email to