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)