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