Hi all.

I used the program "Cppcheck" to IUP 3.10.1(and CD 5.7, IM 3.8.2).
I got some error, So I made Patch file.
 
-Memory leak
-Resource leak
-Mismatching allocation and deallocation
-Buffer is accessed out of bounds
-Instance of '***' object is destroyed immediately
-Memory pointed to by '***' is freed twice.

r.k
diff U3b src/win/iupwin_touch.c src/win/iupwin_touch.c
--- src/win/iupwin_touch.c      Tue Jul 09 10:07:30 2013
+++ src/win/iupwin_touch.c      Sun Jan 26 12:31:25 2014
@@ -125,6 +125,18 @@
             if (cb(ih, ti->dwID, x, y, state)==IUP_CLOSE)
             {
               IupExitLoop();
+              
+              if (mcb)
+              {
+                free(px);
+                free(py);
+                free(pid);
+                free(pstate);
+              }
+              
+              winCloseTouchInputHandle(hTouchInput);
+              free(ti);
+              
               return;
             }
           }
diff U3b src/iup_str.c src/iup_str.c
--- src/iup_str.c       Thu Jan 09 04:06:58 2014
+++ src/iup_str.c       Sun Jan 26 12:31:25 2014
@@ -301,14 +301,8 @@
   /* init buffers array */
   if (buffers_index == -1)
   {
-    int i;
-
-    memset(buffers, 0, sizeof(char*)*LARGE_MAX_BUFFERS);
-    buffers_index = 0;
-
     /* clear all memory only once */
-    for (i=0; i<LARGE_MAX_BUFFERS; i++)
-      memset(buffers[i], 0, sizeof(char)*LARGE_SIZE);
+    memset(buffers, 0, sizeof(buffers));
   }
 
   /* DON'T clear memory everytime because the buffer is too large */
diff U3b srcmglplot/mgl/mgl_ab.cpp srcmglplot/mgl/mgl_ab.cpp
--- srcmglplot/mgl/mgl_ab.cpp   Thu Sep 15 23:21:22 2011
+++ srcmglplot/mgl/mgl_ab.cpp   Sun Jan 26 12:31:25 2014
@@ -699,7 +699,7 @@
        WritePNG(pname,descr);
 
        FILE *fp = fopen(fname,"wt");
-       if(!fp)         {       SetWarn(mglWarnOpen,fname);     return; }
+       if(!fp)         {       SetWarn(mglWarnOpen,fname); delete []pname;     
return; }
        fprintf(fp,"<?xml version=\"1.0\" standalone=\"no\"?>\n");
        fprintf(fp,"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 20000303 
Stylable//EN\" 
\"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd\";>\n");
        fprintf(fp,"<svg width=\"%d\" height=\"%d\">\n",Width,Height);
@@ -711,6 +711,7 @@
        fprintf(fp,"<image x=\"0\" y=\"0\" width=\"%d\" height=\"%d\" 
xlink:href=\"%s\"/>\n", Width, Height, pname);
 
        fprintf(fp,"</g></svg>");
+       fclose(fp);
        delete []pname;
 }
 //-----------------------------------------------------------------------------
diff U3b srcmglplot/mgl/mgl_data_png.cpp srcmglplot/mgl/mgl_data_png.cpp
--- srcmglplot/mgl/mgl_data_png.cpp     Mon May 30 20:12:28 2011
+++ srcmglplot/mgl/mgl_data_png.cpp     Sun Jan 26 12:31:25 2014
@@ -172,12 +172,13 @@
        delete []c;
 
        FILE *fp = fopen(fname, "wb");
-       if (!fp)        return;
+       if (!fp)
+       {       free(p);        free(d);        return;}
        png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, 
0, 0);
-       if (!png_ptr)   {       fclose(fp);     return; }
+       if (!png_ptr)   {       fclose(fp);     free(p);        free(d);        
return; }
        png_infop info_ptr = png_create_info_struct(png_ptr);
        if (!info_ptr)
-       {       png_destroy_write_struct(&png_ptr,0);   fclose(fp);     return; 
}
+       {       png_destroy_write_struct(&png_ptr,0);   fclose(fp);     
free(p);        free(d);return; }
        png_init_io(png_ptr, fp);
        png_set_filter(png_ptr, 0, PNG_ALL_FILTERS);
        png_set_compression_level(png_ptr, Z_BEST_COMPRESSION);
diff U3b srcmglplot/mgl/mgl_parse.cpp srcmglplot/mgl/mgl_parse.cpp
--- srcmglplot/mgl/mgl_parse.cpp        Sun Jun 24 06:14:14 2012
+++ srcmglplot/mgl/mgl_parse.cpp        Sun Jan 26 12:31:25 2014
@@ -826,7 +826,12 @@
                for(i=0;i<10;i++)       kk[i] = i<=k ? a[i].type + 1 : 0;
                for(i=0;i<=k;i++)       mgl_wcstombs(a[i].s, a[i].w, 1024);
                mglCommand *rts=FindCommand(arg[0]);
-               if(!rts || !rts->create)        return 2;
+               if(!rts || !rts->create)        
+               {
+                       delete []a;
+                       delete []s;
+                       return 2;
+               }
                if(out) rts->save(out, k, a, kk);
                n = rts->exec(gr, k, a, kk);
                delete []a;
diff U3b srcmglplot/iup_mglplot.cpp srcmglplot/iup_mglplot.cpp
--- srcmglplot/iup_mglplot.cpp  Wed Jul 17 04:10:04 2013
+++ srcmglplot/iup_mglplot.cpp  Sun Jan 26 12:31:25 2014
@@ -1191,7 +1191,7 @@
       for(int i=0; i< count; i++)
         val[i] = (mreal)i;
       gr->SetTicksVal('x', count, val, (const char**)dsNames);
-      delete val;
+      delete []val;
     }
     else
       gr->SetTicksVal('x', 0, (mreal*)NULL, (const char **)NULL);
diff U3b srctuio/oscpack/osc/OscReceivedElements.cpp 
srctuio/oscpack/osc/OscReceivedElements.cpp
--- srctuio/oscpack/osc/OscReceivedElements.cpp Sat May 16 10:40:18 2009
+++ srctuio/oscpack/osc/OscReceivedElements.cpp Sun Jan 26 12:31:25 2014
@@ -628,12 +628,12 @@
                     case BLOB_TYPE_TAG:
                         {
                             if( argument + 4 > end )
-                                MalformedMessageException( "arguments exceed 
message size" );
+                                throw MalformedMessageException( "arguments 
exceed message size" );
                                 
                             uint32 blobSize = ToUInt32( argument );
                             argument = argument + 4 + RoundUp4( blobSize );
                             if( argument > end )
-                                MalformedMessageException( "arguments exceed 
message size" );
+                                throw MalformedMessageException( "arguments 
exceed message size" );
                         }
                         break;
                         
--- im/src/lua5/imlua_process.c Thu Jun 06 03:59:54 2013
+++ im/src/lua5/imlua_process.c Fri Jan 24 13:04:26 2014
@@ -1798,28 +1798,34 @@
   src_image_list = imlua_toarrayimage(L, 1, &src_count, 1);
   if (src_image_list[0]->data_type == IM_CFLOAT)
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     imlua_errorcfloat(L, 1);
   }
 
-  if (!imImageMatchSize(src_image_list[0], dst_image))
+  if (src_image_list && !imImageMatchSize(src_image_list[0], dst_image))
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     imlua_errormatchsize(L);  
   }
 
-  if (src_image_list[0]->depth != dst_image->depth)
+  if (src_image_list && src_image_list[0]->depth != dst_image->depth)
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     luaL_error(L, "source and destiny images must have the same depth");
   }
 
+  if(src_image_list)
+  {
   params[0] = (float)src_count;
 
   lua_pushboolean(L, imProcessMultiPointOp((const imImage**)src_image_list, 
src_count, dst_image, imluaMultiOpFunc, params, L, op_name));
 
-  free(src_image_list);
-
+    free(src_image_list); src_image_list = NULL;
+  }
+  else
+  {
+    lua_pushboolean(L, 0);
+  }
 #ifdef _OPENMP
   omp_set_num_threads(old_num_threads);
 #endif
@@ -1879,16 +1885,18 @@
   src_image_list = imlua_toarrayimage(L, 1, &src_count, 1);
   if (src_image_list[0]->data_type == IM_CFLOAT)
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     imlua_errorcfloat(L, 1);
   }
 
-  if (!imImageMatchSize(src_image_list[0], dst_image))
+  if (src_image_list && !imImageMatchSize(src_image_list[0], dst_image))
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     imlua_errormatchsize(L);  
   }
 
+  if(src_image_list)
+  {
   src_depth = src_image_list[0]->has_alpha? src_image_list[0]->depth+1: 
src_image_list[0]->depth;
   dst_depth = dst_image->has_alpha? dst_image->depth+1: dst_image->depth;
 
@@ -1898,7 +1906,12 @@
 
   lua_pushboolean(L, imProcessMultiPointColorOp((const 
imImage**)src_image_list, src_count, dst_image, imluaMultiColorOpFunc, params, 
L, op_name));
 
-  free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
+  }
+  else
+  {
+    lua_pushboolean(L, 0);
+  }
 
 #ifdef _OPENMP
   omp_set_num_threads(old_num_threads);
@@ -2141,13 +2154,17 @@
 
   if (!imImageMatch(src_image_list[0], dst_image))
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     imlua_errormatch(L);
   }
 
+  if(src_image_list)
+  {
   imProcessMultipleMean((const imImage**)src_image_list, src_image_count, 
dst_image);
 
-  free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
+  }
+
   return 0;
 }
 
@@ -2167,13 +2184,16 @@
   if (!imImageMatch(src_image_list[0], dst_image) ||
       !imImageMatch(mean_image, dst_image))
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     imlua_errormatch(L);
   }
 
+  if(src_image_list)
+  {
   imProcessMultipleStdDev((const imImage**)src_image_list, src_image_count, 
mean_image, dst_image);
 
-  free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
+  }
   return 0;
 }
 
@@ -2419,29 +2439,35 @@
   src_image_list = imlua_toarrayimage(L, 1, &src_count, 1);
   if (src_count != dst_depth)
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     luaL_error(L, "number of source images must match the depth of the 
destination image");
   }
 
+  if(src_image_list)
+  {
   for (i = 0; i < dst_depth; i++)
   {
     if (src_image_list[i]->color_space != IM_GRAY)
     {
-      free(src_image_list);
+        free(src_image_list); src_image_list = NULL;
       imlua_argerrorcolorspace(L, 2, IM_GRAY);
+        break;
+      }
     }
   }
 
-  if (!imImageMatchDataType(src_image_list[0], dst_image))
+  if (src_image_list && !imImageMatchDataType(src_image_list[0], dst_image))
   {
-    free(src_image_list);
+    free(src_image_list); src_image_list = NULL;
     imlua_errormatchdatatype(L);
   }
 
+  if(src_image_list)
+  {
   imProcessMergeComponents((const imImage**)src_image_list, dst_image);
 
-  free(src_image_list);
-
+    free(src_image_list); src_image_list = NULL;
+  }
   return 0;
 }
 
@@ -2477,22 +2503,26 @@
   src_color = imlua_toarrayfloat(L, 3, &src_count, 1);
   if (src_count != src_image->depth)
   {
-    free(src_color);
+    free(src_color); src_color = NULL;
     luaL_argerror(L, 3, "the colors must have the same number of components of 
the images");
   }
 
   dst_color = imlua_toarrayfloat(L, 4, &dst_count, 1);
   if (dst_count != src_image->depth)
   {
-    free(src_color);
-    free(dst_color);
+    free(src_color); src_color = NULL;
+    free(dst_color); dst_color = NULL;
     luaL_argerror(L, 4, "the colors must have the same number of components of 
the images");
   }
 
+  if(src_color && dst_color)
+  {
   imProcessReplaceColor(src_image, dst_image, src_color, dst_color);
+  }
+
+  free(src_color); src_color = NULL;
+  free(dst_color); dst_color = NULL;
 
-  free(src_color);
-  free(dst_color);
   return 0;
 }
 
@@ -2512,13 +2542,16 @@
   src_color = imlua_toarrayfloat(L, 3, &src_count, 1);
   if (src_count != src_image->depth)
   {
-    free(src_color);
+    free(src_color); src_color = NULL;
     luaL_argerror(L, 3, "the color must have the same number of components of 
the source image");
   }
 
+  if(src_color)
+  {
   imProcessSetAlphaColor(src_image, dst_image, src_color, dst_alpha);
 
-  free(src_color);
+    free(src_color); src_color = NULL;
+  }
   return 0;
 }
 
@@ -2773,13 +2806,20 @@
   value = imlua_toarrayfloat (L, 2, &count, 1);
   if (count != image->depth)
   {
-    free(value);
+    free(value); value = NULL;
     luaL_argerror(L, 2, "invalid number of planes");
   }
 
+  if(value)
+  {
   lua_pushboolean(L, imProcessRenderConstant(image, value));
 
-  free(value);
+    free(value); value = NULL;
+  }
+  else
+  {
+    lua_pushboolean(L, 0);
+  }
   return 1;
 }
 
--- im/src/process/im_canny.cpp Mon Mar 26 05:17:22 2012
+++ im/src/process/im_canny.cpp Sun Jan 19 01:17:40 2014
@@ -91,7 +91,10 @@
 
   y = (float *)calloc ( nr*nc, sizeof (float) );
   if (!y)
+  {
+    free(x);
     return NULL;
+  }
 
   for (i=0; i<nr; i++)
   {  
--- im/src/im_format_wmv.cpp    Thu Sep 27 05:57:53 2012
+++ im/src/im_format_wmv.cpp    Sun Jan 19 01:16:39 2014
@@ -1040,7 +1040,8 @@
     return 0;
 
   DWORD cbVideoInfo = sizeof(WMVIDEOINFOHEADER) - sizeof(BITMAPINFOHEADER) + 
this->BitmapInfoSize;
-  WMVIDEOINFOHEADER* pVideoInfo = (WMVIDEOINFOHEADER*)new BYTE[cbVideoInfo];
+  BYTE* pByteData = new BYTE[cbVideoInfo];
+  WMVIDEOINFOHEADER* pVideoInfo = (WMVIDEOINFOHEADER*)pByteData;
 
   pVideoInfo->rcSource.left = 0;
   pVideoInfo->rcSource.top = 0;
@@ -1080,7 +1081,7 @@
 
   HRESULT hr = Writer->SetInputProps(input_number, Props);
   Props->Release();
-  free(pVideoInfo);
+  delete[] pByteData;
 
   if (FAILED(hr))
     return 0;
--- cd/src/drv/cdgl.c   Tue Aug 06 03:23:59 2013
+++ cd/src/drv/cdgl.c   Tue Jan 21 22:23:43 2014
@@ -103,7 +103,10 @@
 
     len = WideCharToMultiByte(CP_UTF8, 0, toUnicode, wlen, NULL, 0, NULL, 
NULL);
     if(!len)
+    {
+      free(toUnicode);
       return (char*)str;
+    }
 
     ctxcanvas->utf8_buffer = (char*)calloc((len+1), sizeof(char));
     WideCharToMultiByte(CP_UTF8, 0, toUnicode, wlen, ctxcanvas->utf8_buffer, 
len, NULL, NULL);
@@ -122,7 +125,10 @@
 
     cd = iconv_open("UTF-8", "ISO-8859-1");
     if(cd == (iconv_t)-1)
+    {
+      free(utf8);
       return (char*)str;
+    }
 
     ctxcanvas->utf8_buffer = utf8;
                iconv(cd, (char**)&str, &ulen, &utf8, &utf8len);
--- cd/src/drv/cdmf.c   Fri Aug 31 02:56:12 2012
+++ cd/src/drv/cdmf.c   Tue Jan 21 22:25:33 2014
@@ -687,7 +687,10 @@
     int err;
     err = cdsizecb(canvas, w, h, w, h);
     if (err)
+    {
+      fclose(file);
       return CD_ERROR;
+    }
   }
 
   while (!feof(file))
--- cd/src/drv/cdpdf.c  Wed Nov 13 12:19:12 2013
+++ cd/src/drv/cdpdf.c  Tue Jan 21 22:28:29 2014
@@ -1234,7 +1234,11 @@
 
   alpha_size = rw*rh;
   alpha_data = (unsigned char*)malloc(alpha_size);
-  if (!alpha_data) return;
+  if (!alpha_data)
+  {
+    free(rgb_data);
+    return;
+  }
 
   d = 0;
   for (i=ymax; i>=ymin; i--)
@@ -1589,7 +1593,10 @@
 
   line += cdGetFileName(line, filename);
   if (filename[0] == 0)
+  {
+    free(ctxcanvas);
     return;
+  }
 
   ctxcanvas->pdf = PDF_new();
   if (!ctxcanvas->pdf)
--- cd/src/drv/cdps.c   Tue Aug 06 03:59:32 2013
+++ cd/src/drv/cdps.c   Thu Jan 23 15:54:17 2014
@@ -1979,7 +1979,10 @@
 
   line += cdGetFileName(line, filename);
   if (filename[0] == 0)
+  {
+    free(ctxcanvas);
     return;
+  }
 
   if ((ctxcanvas->file = fopen(filename, "w")) == NULL)
   {
--- cd/src/gdiplus/cdwinp.cpp   Tue Aug 20 03:10:54 2013
+++ cd/src/gdiplus/cdwinp.cpp   Tue Jan 21 22:32:14 2014
@@ -265,7 +265,7 @@
     }
 
     ctxcanvas->bitmap->SetPalette(palette);
-    delete palette;
+    delete[] palette;
   }
 }
 
@@ -566,7 +566,7 @@
   delete ctxcanvas->fillBrush;
   ctxcanvas->fillBrush = new TextureBrush(&StippleImage); 
 
-  delete bitmap_data;
+  delete[] bitmap_data;
 }
 
 static void cdpattern(cdCtxCanvas* ctxcanvas, int w, int h, const long int 
*colors)
@@ -596,7 +596,7 @@
   delete ctxcanvas->fillBrush;
   ctxcanvas->fillBrush = new TextureBrush(&PatternImage); 
 
-  delete bitmap_data;
+  delete[] bitmap_data;
 }
 
 static int cdinteriorstyle(cdCtxCanvas* ctxcanvas, int style)
--- cd/src/gdk/cdgdkclp.c       Fri Sep 14 04:38:25 2012
+++ cd/src/gdk/cdgdkclp.c       Tue Jan 21 22:33:27 2014
@@ -42,6 +42,7 @@
   fclose(file);
 
   remove(filename);
+  free(buffer);
 
 #if GTK_CHECK_VERSION(2, 6, 0)
   gtk_clipboard_store(clipboard);
--- cd/src/intcgm/cgm_bin_parse.c       Wed Nov 07 02:06:53 2012
+++ cd/src/intcgm/cgm_bin_parse.c       Tue Jan 21 22:39:20 2014
@@ -1957,9 +1957,15 @@
     pair =(tASF *) malloc(sizeof(tASF));
 
     if(cgm_bin_get_e(cgm, &(pair->type))) 
+    {
+      free(pair);
       return CGM_ERR_READ;
+    }
     if(cgm_bin_get_e(cgm, &(pair->value))) 
+    {
+      free(pair);
       return CGM_ERR_READ;
+    }
 
     cgm_list_append(cgm->asf_list, pair);
   }
--- cd/src/intcgm/cgm_txt_parse.c       Wed Nov 07 02:08:37 2012
+++ cd/src/intcgm/cgm_txt_parse.c       Tue Jan 21 22:41:16 2014
@@ -1738,9 +1738,15 @@
     pair =(tASF *) malloc(sizeof(tASF));
 
     if(cgm_txt_get_e(cgm, &(pair->type), asf_type)) 
+    {
+      free(pair);
       return CGM_ERR_READ;
+    }
     if(cgm_txt_get_e(cgm, &(pair->value), asf_value)) 
+    {
+      free(pair);
       return CGM_ERR_READ;
+    }
 
     cgm_list_append(cgm->asf_list, pair);
   }
--- cd/src/x11/xvertex.c        Tue Dec 01 02:22:20 2009
+++ cd/src/x11/xvertex.c        Tue Jan 21 22:52:15 2014
@@ -523,7 +523,10 @@
   /* find width of longest section */
   str1=my_strdup(text, len);
   if(str1==NULL)
+  {
+    free(item);
     return NULL;
+  }
   
   str3=my_strtok(str1, str2);
   
@@ -580,12 +583,19 @@
   item->corners_x=
     (double *)malloc((unsigned)(4*item->nl*sizeof(double)));
   if(!item->corners_x)
+  {
+    free(item);
     return NULL;
+  }
   
   item->corners_y=
     (double *)malloc((unsigned)(4*item->nl*sizeof(double)));
   if(!item->corners_y)
+  {
+    free(item->corners_x);
+    free(item);
     return NULL;
+  }
   
   /* draw text horizontally */
   
@@ -594,7 +604,12 @@
   
   str1=my_strdup(text, len);
   if(str1==NULL)
+  {
+    free(item->corners_x);
+    free(item->corners_y);
+    free(item);
     return NULL;
+  }
   
   str3=my_strtok(str1, str2);
   
@@ -640,7 +655,12 @@
   /* create image to hold horizontal text */
   I_in=MakeXImage(dpy, item->cols_in, item->rows_in);
   if(I_in==NULL)
+  {
+    free(item->corners_x);
+    free(item->corners_y);
+    free(item);
     return NULL;
+  }
   
   /* extract horizontal text */
   XGetSubImage(dpy, canvas, 0, 0, item->cols_in, item->rows_in, 1, XYPixmap, 
I_in, 0, 0);
@@ -673,7 +693,12 @@
   /* create image to hold rotated text */
   item->ximage=MakeXImage(dpy, item->cols_out, item->rows_out);
   if(item->ximage==NULL)
+  {
+    free(item->corners_x);
+    free(item->corners_y);
+    free(item);
     return NULL;
+  }
   
   byte_w_in=(item->cols_in-1)/8+1;
   byte_w_out=(item->cols_out-1)/8+1;
@@ -1174,7 +1199,10 @@
   
   xp_out=(XPoint *)malloc((unsigned)(5*sizeof(XPoint)));
   if(!xp_out)
+  {
+    free(xp_in);
     return NULL;
+  }
   
   /* bounding box when horizontal, relative to bitmap centre */
   xp_in[0].x=-(double)cols_in*style.magnify/2-style.bbx_pad;
------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today.
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Iup-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/iup-users

Reply via email to