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");