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 "Alberto Massari (JIRA)" <xe...@xml.apache.org> on 2005/01/14 11:42:17 UTC

[jira] Resolved: (XERCESC-490) Memory leak when setCreateEntityReferenceNodes is true

     [ http://issues.apache.org/jira/browse/XERCESC-490?page=history ]
     
Alberto Massari resolved XERCESC-490:
-------------------------------------

     Assign To:     (was: Xerces-C Developers Mailing List)
    Resolution: Fixed

It turns out that the deprecated DOM was not releasing all the reference counts on the document tree when an entity references were created. I checked in a fix for this (even if it was the deprecated DOM); please verify.

Alberto

> Memory leak when setCreateEntityReferenceNodes is true
> ------------------------------------------------------
>
>          Key: XERCESC-490
>          URL: http://issues.apache.org/jira/browse/XERCESC-490
>      Project: Xerces-C++
>         Type: Bug
>   Components: DOM
>     Versions: 1.7.0
>  Environment: Operating System: Solaris
> Platform: Sun
>     Reporter: Tony Wuebben

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

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


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