You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by "Paulo Zanoni (JIRA)" <xe...@xml.apache.org> on 2011/04/15 22:40:06 UTC

[jira] [Updated] (XERCESC-1962) memory leak with XInclude

     [ https://issues.apache.org/jira/browse/XERCESC-1962?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Paulo Zanoni updated XERCESC-1962:
----------------------------------

    Attachment: xinclude-example.xml
                xinclude_leak.cpp

Files to reproduce the bug.

Compile and run with valgrind --leak-check=full

> 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
>              Labels: example, leak, patch,
>         Attachments: xinclude-example.xml, xinclude_leak.cpp
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> 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-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org