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 na...@apache.org on 2005/10/19 03:37:56 UTC

svn commit: r326317 - in /webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp: BeanParamWriter.java literal/BeanParamWriter.java

Author: nadiramra
Date: Tue Oct 18 18:37:46 2005
New Revision: 326317

URL: http://svn.apache.org/viewcvs?rev=326317&view=rev
Log:
Fix AXISCPP-343 - SIGSEGV deserializing an array of complex elements

Modified:
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
    webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java?rev=326317&r1=326316&r2=326317&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/BeanParamWriter.java Tue Oct 18 18:37:46 2005
@@ -661,19 +661,14 @@
 		writer.write("\t\t\t" + classname + "* pNew = new " + classname
 				+ "[nSize];\n");
 		
-		writer.write("\t\t\tlong *p1 = (long*)pObj;\n");
-        writer.write("\t\t\tlong *p2 = (long*)pNew;\n");
-        writer.write("\t\t\tsize_t i = nSize * sizeof(" + classname
-        		+ ")/ sizeof(long) / 2;\n");
-        writer.write("\t\t\twhile (i)\n\t\t\t{\n");
-        writer.write("\t\t\t\tlong c = *p1;\n");
-        writer.write("\t\t\t\t*p1 = *p2;\n");
-        writer.write("\t\t\t\t*p2 = c;\n");
-        writer.write("\t\t\t\t++p1;\n");
-        writer.write("\t\t\t\t++p2;\n");
-        writer.write("\t\t\t\t--i;\n\t\t\t}\n");
+            writer.write("\t\t\tsize_t i = nSize/2;\n");
+            writer.write("\t\t\tfor (int ii=0; ii<i; ++ii)\n"); 
+            writer.write("\t\t\t{\n");
+            writer.write("\t\t\t\tpNew[ii] = pObj[ii];\n");
+            writer.write("\t\t\t\tpObj[ii].reset();\n");
+            writer.write("\t\t\t}\n");
 		
-        writer.write("\t\t\tdelete [] pObj;\n");
+            writer.write("\t\t\tdelete [] pObj;\n");
         
 		writer.write("\t\t\treturn pNew;\n\t\t}\n\t\telse\n\t\t{\n");
 		writer
@@ -709,6 +704,23 @@
 	protected void writeConstructors() throws WrapperFault {
 		try {
 			writer.write("\n" + classname + "::" + classname + "()\n{\n");
+			writer.write("\t reset();\n");
+			writer.write("}\n");
+
+                  writeReset(); 
+
+		} catch (IOException e) {
+			throw new WrapperFault(e);
+		}
+	}
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see 
+	 */
+	protected void writeReset() throws WrapperFault {
+		try {
+			writer.write("\nvoid " + classname + "::reset()\n{\n");
 			writer
 					.write("\t/*do not allocate memory to any pointer members here\n\t because deserializer will allocate memory anyway. */\n");
 			
@@ -751,6 +763,7 @@
 			throw new WrapperFault(e);
 		}
 	}
+
 
 	/*
 	 * (non-Javadoc)

Modified: webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java?rev=326317&r1=326316&r2=326317&view=diff
==============================================================================
--- webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java (original)
+++ webservices/axis/trunk/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java Tue Oct 18 18:37:46 2005
@@ -1086,18 +1086,14 @@
         writer.write("\tif (bArray && (nSize > 0))\n\t{\n\t\tif (pObj)\n\t\t{\n");
         writer.write("\t\t\t" + classname + "* pNew = new " + classname
                 + "[nSize];\n");
-        writer.write("\t\t\tlong *p1 = (long*)pObj;\n");
-        writer.write("\t\t\tlong *p2 = (long*)pNew;\n");
-        writer.write("\t\t\tsize_t i = nSize * sizeof(" + classname
-        		+ ")/ sizeof(long) / 2;\n");
-        writer.write("\t\t\twhile (i)\n\t\t\t{\n");
-        writer.write("\t\t\t\tlong c = *p1;\n");
-        writer.write("\t\t\t\t*p1 = *p2;\n");
-        writer.write("\t\t\t\t*p2 = c;\n");
-        writer.write("\t\t\t\t++p1;\n");
-        writer.write("\t\t\t\t++p2;\n");
-        writer.write("\t\t\t\t--i;\n\t\t\t}\n");
-        
+
+        writer.write("\t\t\tsize_t i = nSize/2;\n");
+        writer.write("\t\t\tfor (int ii=0; ii<i; ++ii)\n"); 
+        writer.write("\t\t\t{\n");
+        writer.write("\t\t\t\tpNew[ii] = pObj[ii];\n");
+        writer.write("\t\t\t\tpObj[ii].reset();\n");
+        writer.write("\t\t\t}\n");
+
         writer.write("\t\t\tdelete [] pObj;\n");
         writer.write("\t\t\treturn pNew;\n\t\t}\n\t\telse\n\t\t{\n");
         writer.write("\t\t\treturn new " + classname
@@ -1135,6 +1131,24 @@
         try
         {
             writer.write("\n" + classname + "::" + classname + "()\n{\n");
+		writer.write("\t reset();\n");
+		writer.write("}\n"); 
+
+            writeReset(); 
+	   } catch (IOException e) {
+			throw new WrapperFault(e);
+	     }    
+    }
+    /*
+     * (non-Javadoc)
+     * 
+     * @see 
+     */
+    protected void writeReset() throws WrapperFault
+    {
+        try
+        {
+		writer.write("\nvoid " + classname + "::reset()\n{\n");
             writer.write("\t/*do not allocate memory to any pointer members here\n\t because deserializer will allocate memory anyway. */\n");
             
             int anyCounter = 0;
@@ -1207,6 +1221,7 @@
             throw new WrapperFault(e);
         }
     }
+
 
     /*
      * (non-Javadoc)