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 "Blair Fonville (JIRA)" <xe...@xml.apache.org> on 2018/04/05 22:05:00 UTC
[jira] [Created] (XERCESC-2145) indefinite memory allocations using
DOMNode::getTextContent()
Blair Fonville created XERCESC-2145:
---------------------------------------
Summary: 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.2.1, 3.1.2
Environment: Windows 10, Visual Studio 2017
Reporter: Blair Fonville
Attachments: main.cpp
When using Xerces-C++ in a program, which reads (parses) an xml file once into a DOMDocument, and then accesses the DOMDocument's nodes/elements often through getTextContent(), the heap memory builds indefinitely.
For example:
#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);
}
}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org