You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by su...@apache.org on 2004/06/25 09:59:32 UTC

cvs commit: ws-axis/c/src/xml/xerces XercesHandler.cpp XercesHandler.h

susantha    2004/06/25 00:59:32

  Modified:    c/src/xml/xerces XercesHandler.cpp XercesHandler.h
  Log:
  Fixing memory leaks in Xerces parser wrapper
  
  Revision  Changes    Path
  1.4       +33 -2     ws-axis/c/src/xml/xerces/XercesHandler.cpp
  
  Index: XercesHandler.cpp
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/xml/xerces/XercesHandler.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XercesHandler.cpp	25 Jun 2004 06:37:40 -0000	1.3
  +++ XercesHandler.cpp	25 Jun 2004 07:59:32 -0000	1.4
  @@ -150,16 +150,47 @@
       if (m_pCurrElement)
       {
           if (m_bEndElementFollows)
  -            /* free only attributes list if available */
  +        /* free only attributes list if available. Next time 
  +		 * the same Nelement is freed.
  +		 */
           {
               m_bEndElementFollows = false;
               Nelement->m_type = END_ELEMENT;
  +			freeAttributes();
               Nelement->m_pchAttributes[0] = NULL;
           }
           else
  -            /* free all inner strings */
  +        /* free all inner strings */
           {
  +			if (Nelement->m_pchNameOrValue)
  +			{
  +				XMLString::release(const_cast<char**>(&(Nelement->m_pchNameOrValue)));
  +				Nelement->m_pchNameOrValue = 0;
  +			}
  +			if (Nelement->m_pchNamespace)
  +			{
  +				XMLString::release(const_cast<char**>(&(Nelement->m_pchNamespace)));
  +				Nelement->m_pchNamespace = 0;
  +			}
  +			freeAttributes();
               m_pCurrElement = 0;
           }
       }
   }
  +
  +void XercesHandler::freeAttributes()
  +{
  +	for (int x=0; Nelement->m_pchAttributes[x]; x+=3)
  +	{
  +		if (Nelement->m_pchAttributes[x])
  +		{
  +			XMLString::release(const_cast<char**>(&(Nelement->m_pchAttributes[x])));
  +			Nelement->m_pchAttributes[x] = 0;
  +			if (Nelement->m_pchAttributes[x+1])
  +				XMLString::release(const_cast<char**>(&(Nelement->m_pchAttributes[x+1])));
  +			if (Nelement->m_pchAttributes[x+2])
  +				XMLString::release(const_cast<char**>(&(Nelement->m_pchAttributes[x+2])));
  +		}
  +	}
  +}
  +
  
  
  
  1.5       +1 -1      ws-axis/c/src/xml/xerces/XercesHandler.h
  
  Index: XercesHandler.h
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/xml/xerces/XercesHandler.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XercesHandler.h	25 Jun 2004 06:37:40 -0000	1.4
  +++ XercesHandler.h	25 Jun 2004 07:59:32 -0000	1.5
  @@ -80,6 +80,6 @@
           Nelement->m_pchNameOrValue = NULL;
           Nelement->m_pchNamespace = NULL;
       }
  -
  +	void freeAttributes();
   };