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