[ 
https://issues.apache.org/jira/browse/XERCESC-2145?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16427773#comment-16427773
 ] 

Blair Fonville commented on XERCESC-2145:
-----------------------------------------

Maybe it depends on what constitutes a bug. In a program which populates a 
Document at startup, and then uses the Document forever, it is a memory leak.

For instance, in my case I was loading a configuration xml at startup. In a UI 
thread, the user might change the document's contents. The worker thread 
therefore routinely reads the nodes the check for modifications to the config 
(in order to act accordingly). At the end of the program, the config is saved 
back to the xml file. But at no point is the document freed; why would it be? 
This would seem like a typical use of xml, and an xml parser. Seems like a bug 
to me, that the node contents can't be read without leaking memory.

> indefinite memory allocations using DOMNode::getTextContent()
> -------------------------------------------------------------
>
>                 Key: XERCESC-2145
>                 URL: https://issues.apache.org/jira/browse/XERCESC-2145
>             Project: Xerces-C++
>          Issue Type: Bug
>          Components: DOM
>    Affects Versions: 3.1.2, 3.2.1
>         Environment: Windows 10, Visual Studio 2017
>            Reporter: Blair Fonville
>            Priority: Major
>         Attachments: config.xml, main.cpp
>
>
> In a program which reads (parses) an xml file once into a DOMDocument, and 
> then accesses the content of the nodes/elements often, through 
> getTextContent(), the heap memory builds indefinitely.
> For example: 
> {code:java}
> #include <xercesc/dom/DOM.hpp>
> XERCES_CPP_NAMESPACE_USE
> int main(int argc, char **argv)
> {
>    XMLPlatformUtils::Initialize();
>    XMLCh tempStr[100];
>    XMLString::transcode("LS", tempStr, 99);
>    DOMImplementation *impl = 
> DOMImplementationRegistry::getDOMImplementation(tempStr);
>    DOMLSParser *parser = ((DOMImplementationLS*)impl) ->createLSParser( 
> DOMImplementationLS::MODE_SYNCHRONOUS, 0);
>    DOMDocument *doc = impl->createDocument(0, 0, 0);
>    doc = parser->parseURI("config.xml");
>    DOMElement *el = doc->getDocumentElement();
>    // Heap blows up here
>    while (1) {
>       char *cstr = XMLString::transcode(el->getTextContent());
>       XMLString::release(&cstr);
>    }
>    // and/or here
>    while (1) {
>       XMLCh *xstr = XMLString::replicate(el->getTextContent());
>       char *cstr = XMLString::transcode(xstr);
>       XMLString::release(&cstr);
>       XMLString::release(&xstr);
>    }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
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