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 wh...@apache.org on 2005/07/06 16:57:55 UTC

cvs commit: ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal BeanParamWriter.java

whitlock    2005/07/06 07:57:55

  Modified:    c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal
                        BeanParamWriter.java
  Log:
  Check pointers are not NULL before deleting them in generated destructors
  
  Revision  Changes    Path
  1.81      +40 -27    ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java
  
  Index: BeanParamWriter.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/c/src/wsdl/org/apache/axis/wsdl/wsdl2ws/cpp/literal/BeanParamWriter.java,v
  retrieving revision 1.80
  retrieving revision 1.81
  diff -u -r1.80 -r1.81
  --- BeanParamWriter.java	29 Jun 2005 10:52:46 -0000	1.80
  +++ BeanParamWriter.java	6 Jul 2005 14:57:55 -0000	1.81
  @@ -1157,43 +1157,56 @@
               // so temporarily remove this section, until such time as a better
               // solution is found
               for(int i = 0; i< attribs.length;i++){
  +			String name = attribs[i].getParamNameAsMember();
  +			String typename = attribs[i].getTypeName();
               	if(attribs[i].isArray()){
               		if ( attribs[i].isSimpleType())
               		{
               			if (attribs[i].getChoiceElement())
  -							writer.write("\tdelete [] (("+attribs[i].getTypeName()+"*)"+attribs[i].getParamNameAsMember()+"->m_Array);\n");
  -						else	
  -							writer.write("\tdelete [] (("+attribs[i].getTypeName()+"*)"+attribs[i].getParamNameAsMember()+".m_Array);\n");
  +					{
  +						writer.write("\tif (" + name + "->m_Array != NULL)\n");
  +						writer.write("\t\tdelete [] (("+typename+"*)"+name+"->m_Array);\n");
  +					}
  +					else	
  +					{
  +						writer.write("\tif (" + name + ".m_Array != NULL)\n");
  +						writer.write("\t\tdelete [] (("+typename+"*)"+name+".m_Array);\n");
  +					}
               		}
               		else
               		{
  -            					if( isNillable())
  -            					{
  -            						writer.write("\tdelete "+attribs[i].getParamNameAsMember()+".m_Array;\n");
  -            					}
  -            					else
  -            					{
  -            						writer.write("\tdelete [] (("+attribs[i].getTypeName()+"*)"+attribs[i].getParamNameAsMember()+".m_Array);\n");
  -            					}
  -            				}
  +            			if( isNillable())
  +            			{
  +						writer.write("\tif (" + name + ".m_Array != NULL)\n");
  +            				writer.write("\t\tdelete "+name+".m_Array;\n");
               			}
  -            			else if (attribs[i].isAnyType()){
  -            				writer.write("\tif ("+attribs[i].getParamNameAsMember()+") \n\t{\n");
  -            				writer.write("\t\tfor (int i=0; i<"+attribs[i].getParamNameAsMember()+"->_size; i++)\n\t\t{\n");
  -            				writer.write("\t\t\tif ("+attribs[i].getParamNameAsMember()+"->_array[i]) delete [] "+attribs[i].getParamNameAsMember()+"->_array[i];\n");
  -            				writer.write("\t\t}\n");
  -            				writer.write("\t\tdelete "+attribs[i].getParamNameAsMember()+";\n");
  -            				writer.write("\t}\n");
  -            				
  -            			}
  -            			else if (!attribs[i].isSimpleType()){
  -            				writer.write("\tdelete "+attribs[i].getParamNameAsMember()+";\n");
  -            			} else if (CUtils.isPointerType(attribs[i].getTypeName())) {
  -            				// found pointer type
  -            				// System.out.println("Pointer type found " + attribs[i].getTypeName() + " " + attribs[i].getParamNameAsMember());
  -            				writer.write("\tdelete [] "+attribs[i].getParamNameAsMember()+";\n");
  +            			else
  +            			{
  +						writer.write("\tif (" + name + ".m_Array != NULL)\n");
  +            				writer.write("\t\tdelete [] (("+typename+"*)"+name+".m_Array);\n");
               			}
               		}
  +            	}
  +            	else if (attribs[i].isAnyType()){
  +            		writer.write("\tif ("+name+") \n\t{\n");
  +            		writer.write("\t\tfor (int i=0; i<"+name+"->_size; i++)\n\t\t{\n");
  +            		writer.write("\t\t\tif ("+name+"->_array[i]) delete [] "+name+"->_array[i];\n");
  +            		writer.write("\t\t}\n");
  +            		writer.write("\t\tdelete "+name+";\n");
  +            		writer.write("\t}\n");
  +            		
  +            	}
  +            	else if (!attribs[i].isSimpleType())
  +			{
  +				writer.write("\tif (" + name + " != NULL)\n");
  +            		writer.write("\t\tdelete "+name+";\n");
  +            	} else if (CUtils.isPointerType(typename)) {
  +            		// found pointer type
  +            		// System.out.println("Pointer type found " + typename + " " + name);
  +				writer.write("\tif (" + name + " != NULL)\n");
  +            		writer.write("\t\tdelete [] "+name+";\n");
  +            	}
  +           	}
               writer.write("}\n");
           }
           catch (IOException e)