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();
};