You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2006/01/31 20:10:59 UTC
svn commit: r373888 - in /webservices/axis/trunk/c/src:
soap/SoapDeSerializer.cpp
wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java
Author: dicka
Date: Tue Jan 31 11:10:53 2006
New Revision: 373888
URL: http://svn.apache.org/viewcvs?rev=373888&view=rev
Log:
Resolve memory corruption in generated stubs when handling server faults.
Modified:
webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp
webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java
Modified: webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp?rev=373888&r1=373887&r2=373888&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp (original)
+++ webservices/axis/trunk/c/src/soap/SoapDeSerializer.cpp Tue Jan 31 11:10:53 2006
@@ -2261,8 +2261,9 @@
for (i=0; i<any->_size; i++) if (any->_array[i])
{
strcat(ret,any->_array[i]);
- delete any->_array[i];
+ delete [] any->_array[i];
}
+ delete any->_array;
delete any;
return ret;
}
Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java?rev=373888&r1=373887&r2=373888&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/ClientStubWriter.java Tue Jan 31 11:10:53 2006
@@ -1281,30 +1281,30 @@
int j = 0;
if (!paramsFault.hasNext ())
{
- writer.write ("\t\t\t\tconst char *detail = pSoapFault->getSimpleFaultDetail();\n");
- writer.write ("\t\t\t\tbool deleteDetail=false;\n\n");
- writer.write ("\t\t\t\tif (NULL==detail || 0==strlen(detail))\n");
- writer.write ("\t\t\t\t{\n");
- writer.write ("\t\t\t\t\tdetail=m_pCall->getFaultAsXMLString();\n");
- writer.write ("\t\t\t\t\tif (NULL==detail)\n");
- writer.write ("\t\t\t\t\t{\n");
- writer.write ("\t\t\t\t\t\tdetail=\"\";\n");
- writer.write ("\t\t\t\t\t}\n");
- writer.write ("\t\t\t\t\telse\n");
- writer.write ("\t\t\t\t\t{\n");
- writer.write ("\t\t\t\t\t\tdeleteDetail=true;\n");
- writer.write ("\t\t\t\t\t}\n");
- writer.write ("\t\t\t\t}\n\n");
- writer.write ("\t\t\t\tOtherFaultException ofe(pSoapFault->getFaultcode(),\n");
- writer.write ("\t\t\t\t\tpSoapFault->getFaultstring(), pSoapFault->getFaultactor(),\n");
- writer.write ("\t\t\t\t\tdetail, iExceptionCode);\n\n");
- writer.write ("\t\t\t\tif (deleteDetail && NULL!=detail)\n");
+ writer.write ("\t\t\tconst char *detail = pSoapFault->getSimpleFaultDetail();\n");
+ writer.write ("\t\t\tbool deleteDetail=false;\n\n");
+ writer.write ("\t\t\tif (NULL==detail || 0==strlen(detail))\n");
+ writer.write ("\t\t\t{\n");
+ writer.write ("\t\t\t\tdetail=m_pCall->getFaultAsXMLString();\n");
+ writer.write ("\t\t\t\tif (NULL==detail)\n");
+ writer.write ("\t\t\t\t{\n");
+ writer.write ("\t\t\t\t\tdetail=\"\";\n");
+ writer.write ("\t\t\t\t}\n");
+ writer.write ("\t\t\t\telse\n");
writer.write ("\t\t\t\t{\n");
- writer.write ("\t\t\t\t\tdelete [] const_cast<char*>(detail);\n");
- writer.write ("\t\t\t\t}\n\n");
- writer.write ("\t\t\t\tm_pCall->unInitialize();\n");
- writer.write ("\t\t\t\tdelete pSoapFault;\n");
- writer.write ("\t\t\t\tthrow ofe;\n");
+ writer.write ("\t\t\t\t\tdeleteDetail=true;\n");
+ writer.write ("\t\t\t\t}\n");
+ writer.write ("\t\t\t}\n\n");
+ writer.write ("\t\t\tOtherFaultException ofe(pSoapFault->getFaultcode(),\n");
+ writer.write ("\t\t\t\tpSoapFault->getFaultstring(), pSoapFault->getFaultactor(),\n");
+ writer.write ("\t\t\t\tdetail, iExceptionCode);\n\n");
+ writer.write ("\t\t\tif (deleteDetail && NULL!=detail)\n");
+ writer.write ("\t\t\t{\n");
+ writer.write ("\t\t\t\tAxis::AxisDelete( (void *) const_cast<char*>(detail), XSD_STRING);\n");
+ writer.write ("\t\t\t}\n\n");
+ writer.write ("\t\t\tm_pCall->unInitialize();\n");
+ writer.write ("\t\t\tdelete pSoapFault;\n");
+ writer.write ("\t\t\tthrow ofe;\n");
}
else
{
@@ -1389,7 +1389,7 @@
writer.write ("\t\t\t\t\tdetail, iExceptionCode);\n\n");
writer.write ("\t\t\t\tif (deleteDetail && NULL!=detail)\n");
writer.write ("\t\t\t\t{\n");
- writer.write ("\t\t\t\t\tdelete [] const_cast<char*>(detail);\n");
+ writer.write ("\t\t\t\t\tAxis::AxisDelete( (void *) const_cast<char*>(detail), XSD_STRING);\n");
writer.write ("\t\t\t\t}\n\n");
writer.write ("\t\t\t\tm_pCall->unInitialize();\n");
writer.write ("\t\t\t\tdelete pSoapFault;\n");