[
https://issues.apache.org/jira/browse/XERCESC-2145?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Blair Fonville updated XERCESC-2145:
------------------------------------
Description:
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.
was:
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}
> 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: [email protected]
For additional commands, e-mail: [email protected]