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)
  
  
  

Reply via email to