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 bu...@apache.org on 2002/06/07 14:31:54 UTC

DO NOT REPLY [Bug 9691] New: - Memory leak when setCreateEntityReferenceNodes is true

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9691>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9691

Memory leak when setCreateEntityReferenceNodes is true

           Summary: Memory leak when setCreateEntityReferenceNodes is true
           Product: Xerces-C++
           Version: 1.7.0
          Platform: Sun
        OS/Version: Solaris
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: DOM
        AssignedTo: xerces-c-dev@xml.apache.org
        ReportedBy: anthony.wuebben@lexisnexis.com


I'm running on Solaris 5.7 with xerces 1.7 and I am seeing the following
problem:

My long running applications are leaking what appears to be the entire DOM
tree when setCreateEntityReferenceNodes() is set to true and the XML file
being parsed contains a entity reference.  If I turn off the creatation of
entity references or pass in a file that does not contain entity-reference
everything is fine.

Below is a sample of the code that fails. Just give it the below document
that contains an entity-reference and it leaks.


CODE
while(1) {
 
    try {
        fprintf(stderr,"Calling XMLPlatformUtils::Initialize()\n");
        XMLPlatformUtils::Initialize();
        }
    catch(const XMLException& toCatch) {
        char *cp = XMLString::transcode(toCatch.getMessage());
        fprintf(stderr,"Error during Xerces-c Initialization: [%s]\n",cp);
        delete [] cp;
        return 1;
        }
 
         DOMParser * _parser = new DOMParser;
 
        _parser->setDoValidation(false);
        _parser->setValidationScheme(DOMParser::Val_Never);
        _parser->setCreateEntityReferenceNodes(true);
        _parser->setToCreateXMLDeclTypeNode(true);
        _parser->setIncludeIgnorableWhitespace(true);
        _parser->setDoNamespaces(false);
 
       _parser->parse(filename);
  
        delete _parser;

    try {
        fprintf(stderr,"Calling XMLPlatformUtils::Terminate()\n");
        XMLPlatformUtils::Terminate();
        }
    catch(const XMLException& toCatch) {
        char *cp = XMLString::transcode(toCatch.getMessage());
        fprintf(stderr,"Error during Xerces-c Termination: [%s]\n",cp);
        delete [] cp;
        }
} // end forever
        exit(0);
}

FILE
<!DOCTYPE foo [ 
        <!ELEMENT foo (foo1|foo2) >
        <!ELEMENT foo1 (#PCDATA)* >
        <!ELEMENT foo2 (#PCDATA)* >
<!ENTITY entityfoo "entity-value">
]>
<foo><foo1>This a some test data &entityfoo; and more test data
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn</foo1></foo>

---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org