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

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

Scott, It worked just as you described. Thank you. I apologize for my 
oversight. Hopefully future releases will remove getTextContent. It is rather 
non-intuitive.

> 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}
> I realize that the memory is supposed to be freed when the Document is 
> released, but in a program where the Document is populated at startup, and 
> used forever, this is, for all practical purposes, a memory leak. 



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