diff --git a/src/create_alloc_ids.awk b/src/create_alloc_ids.awk index 1c6c7305..c9710ff6 100755 --- a/src/create_alloc_ids.awk +++ b/src/create_alloc_ids.awk @@ -21,7 +21,7 @@ BEGIN{ while(getline < filename) { if(create_id == 0) { if(!start) f = f "\n" - str = gensub(/(my_(malloc|calloc|realloc|free|strcat|strncat|mstrcat|strdup|strdup2))\([0-9]+,/, "\\1(_ALLOC_ID_,", "G") + str = gensub(/(my_(malloc|calloc|realloc|free|strcat|strcat2|strncat|mstrcat|strdup|strdup2))\([0-9]+,/, "\\1(_ALLOC_ID_,", "G") if(str != $0) changed = 1 f = f str } else { diff --git a/src/draw.c b/src/draw.c index c213f642..6a2d4334 100644 --- a/src/draw.c +++ b/src/draw.c @@ -277,6 +277,7 @@ void draw_string(int layer, int what, const char *str, short rot, short flip, in &textx1,&texty1,&textx2,&texty2, &no_of_lines, &longest_line); if(!textclip(xctx->areax1,xctx->areay1,xctx->areax2, xctx->areay2,textx1,texty1,textx2,texty2)) { + my_free(_ALLOC_ID_, &estr); return; } @@ -363,7 +364,10 @@ void draw_string(int layer, int what, const char *str, short rot, short flip, in text_bbox(estr, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1, &textx1,&texty1,&textx2,&texty2, &no_of_lines, &longest_line); if(!textclip(xctx->areax1,xctx->areay1,xctx->areax2,xctx->areay2, - textx1,texty1,textx2,texty2)) return; + textx1,texty1,textx2,texty2)) { + my_free(_ALLOC_ID_, &estr); + return; + } x1=textx1;y1=texty1; if(rot&1) {y1=texty2;rot=3;} else rot=0; @@ -415,7 +419,10 @@ void draw_temp_string(GC gctext, int what, const char *str, short rot, short fli estr = my_expand(str, tclgetintvar("tabstop")); dbg(2, "draw_string(): string=%s\n",estr); if(!text_bbox(estr, xscale, yscale, rot, flip, hcenter, vcenter, x1,y1, - &textx1,&texty1,&textx2,&texty2, &tmp, &dtmp)) return; + &textx1,&texty1,&textx2,&texty2, &tmp, &dtmp)) { + my_free(_ALLOC_ID_, &estr); + return; + } drawtemprect(gctext,what, textx1,texty1,textx2,texty2); my_free(_ALLOC_ID_, &estr); } diff --git a/src/psprint.c b/src/psprint.c index 47c31fee..42303014 100644 --- a/src/psprint.c +++ b/src/psprint.c @@ -686,6 +686,7 @@ static void ps_draw_string(int layer, const char *str, short rot, short flip, in if(!textclip(xctx->areax1,xctx->areay1,xctx->areax2, xctx->areay2,textx1,texty1,textx2,texty2)) { + my_free(_ALLOC_ID_, &estr); return; } if(hcenter) { @@ -755,7 +756,10 @@ static void old_ps_draw_string(int gctext, const char *str, x1,y1, &rx1,&ry1,&rx2,&ry2, &no_of_lines, &longest_line); #endif - if(!textclip(xctx->areax1,xctx->areay1,xctx->areax2,xctx->areay2,rx1,ry1,rx2,ry2)) return; + if(!textclip(xctx->areax1,xctx->areay1,xctx->areax2,xctx->areay2,rx1,ry1,rx2,ry2)) { + my_free(_ALLOC_ID_, &estr); + return; + } set_ps_colors(gctext); x1=rx1;y1=ry1; if(rot&1) {y1=ry2;rot=3;} diff --git a/src/svgdraw.c b/src/svgdraw.c index a8113ebb..b1f1a4a8 100644 --- a/src/svgdraw.c +++ b/src/svgdraw.c @@ -334,6 +334,7 @@ static void svg_draw_string(int layer, const char *str, short rot, short flip, i text_bbox(estr, xscale, yscale, rot, flip, hcenter, vcenter, x,y, &textx1,&texty1,&textx2,&texty2, &no_of_lines, &longest_line); if(!textclip(xctx->areax1,xctx->areay1,xctx->areax2,xctx->areay2,textx1,texty1,textx2,texty2)) { + my_free(_ALLOC_ID_, &estr); return; } if(hcenter) { @@ -403,7 +404,10 @@ static void old_svg_draw_string(int layer, const char *str, text_bbox(estr, xscale, yscale, rot, flip, hcenter, vcenter, x,y, &rx1,&ry1,&rx2,&ry2, &no_of_lines, &longest_line); #endif - if(!textclip(xctx->areax1,xctx->areay1,xctx->areax2,xctx->areay2,rx1,ry1,rx2,ry2)) return; + if(!textclip(xctx->areax1,xctx->areay1,xctx->areax2,xctx->areay2,rx1,ry1,rx2,ry2)) { + my_free(_ALLOC_ID_, &estr); + return; + } x=rx1;y=ry1; if(rot&1) {y=ry2;rot=3;} else rot=0; diff --git a/src/xinit.c b/src/xinit.c index af0a7925..da0a7e71 100644 --- a/src/xinit.c +++ b/src/xinit.c @@ -943,6 +943,7 @@ static void xwin_exit(void) list_tokens(NULL, 0); /* clear static data in function */ translate(0, NULL); /* clear static data in function */ translate2(NULL, 0, NULL); /* clear static data in function */ + translate3(NULL, 0, NULL, NULL, NULL); /* clear static data in function */ subst_token(NULL, NULL, NULL); /* clear static data in function */ find_nth(NULL, "", "", 0, 0); /* clear static data in function */ trim_chars(NULL, ""); /* clear static data in function */ @@ -959,13 +960,13 @@ static void xwin_exit(void) my_free(_ALLOC_ID_, &cli_opt_argv[i]); } my_free(_ALLOC_ID_, &cli_opt_argv); + if(xschem_web_dirname[0]) tclvareval("file delete -force ", xschem_web_dirname, NULL); if(errfp!=stderr) fclose(errfp); errfp=stderr; dbg(1, "xwin_exit(): closing tcp servers\n"); tcleval("if {[info exists xschem_server_getdata(server)]} { close $xschem_server_getdata(server) }"); tcleval("if {[info exists bespice_server_getdata(server)]} { close $bespice_server_getdata(server) }"); if(!cli_opt_detach) printf("\n"); - if(xschem_web_dirname[0]) tclvareval("file delete -force ", xschem_web_dirname, NULL); init_done=0; /* 20150409 to avoid multiple calls */ }