From d75746bcf45af5bc88847cfe54942e0705aa3ee6 Mon Sep 17 00:00:00 2001 From: Philippe Pepiot Date: Fri, 19 Nov 2010 17:36:37 +0100 Subject: [PATCH] s/strcpy/strncpy and fix somes unused variables --- src/barwin.c | 4 ++-- src/client.c | 2 +- src/draw.c | 34 ++++++++++++++++++++++------------ src/launcher.c | 4 ++-- src/screen.c | 2 ++ src/status.c | 10 +++++----- src/tag.c | 15 +++++++++++++-- src/util.c | 2 +- src/viwmfs.c | 2 +- src/wmfs.c | 2 +- src/wmfs.h | 4 ++-- 11 files changed, 52 insertions(+), 29 deletions(-) diff --git a/src/barwin.c b/src/barwin.c index 4fe0c5e..13ce885 100644 --- a/src/barwin.c +++ b/src/barwin.c @@ -116,7 +116,7 @@ barwin_draw_text(BarWindow *bw, int x, int y, char *text) draw_rectangle(bw->dr, x - 4, 0, textw(text) + 8, bw->geo.height, bw->bg); /* Draw text */ - draw_text(bw->dr, x, y, bw->fg, 0, text); + draw_text(bw->dr, x, y, bw->fg, text); barwin_refresh(bw); @@ -136,7 +136,7 @@ barwin_draw_image_ofset_text(BarWindow *bw, int x, int y, char *text, int x_imag draw_rectangle(bw->dr, x - 4, 0, textw(text) + 8, bw->geo.height, bw->bg); /* Draw text */ - draw_image_ofset_text(bw->dr, x, y, bw->fg, 0, text, x_image_ofset, y_image_ofset); + draw_image_ofset_text(bw->dr, x, y, bw->fg, text, x_image_ofset, y_image_ofset); barwin_refresh(bw); diff --git a/src/client.c b/src/client.c index 9bc81d7..d3a9f75 100644 --- a/src/client.c +++ b/src/client.c @@ -1023,7 +1023,7 @@ client_set_rules(Client *c) if(XGetWindowProperty(dpy, c->win, ATOM("WM_WINDOW_ROLE"), 0L, 0x7FFFFFFFL, False, XA_STRING, &rf, &f, &n, &il, &data) == Success && data) { - strcpy(wwrole, (char*)data); + strncpy(wwrole, (char*)data, sizeof(wwrole)); XFree(data); } diff --git a/src/draw.c b/src/draw.c index bc2d55a..4fa3b3f 100644 --- a/src/draw.c +++ b/src/draw.c @@ -33,9 +33,9 @@ #include "wmfs.h" void -draw_text(Drawable d, int x, int y, char* fg, int pad, char *str) +draw_text(Drawable d, int x, int y, char* fg, char *str) { - draw_image_ofset_text(d, x, y, fg, pad, str, 0, 0); + draw_image_ofset_text(d, x, y, fg, str, 0, 0); } /** Draw a string in a Drawable @@ -47,22 +47,28 @@ draw_text(Drawable d, int x, int y, char* fg, int pad, char *str) * \param str String that will be draw */ void -draw_image_ofset_text(Drawable d, int x, int y, char* fg, int pad, char *str, int x_image_ofset, int y_image_ofset) +draw_image_ofset_text(Drawable d, int x, int y, char* fg, char *str, int x_image_ofset, int y_image_ofset) { XftColor xftcolor; XftDraw *xftd; - (void)pad; +#ifdef HAVE_IMLIB + char *ostr = NULL; + int i, ni, sw = 0; + ImageAttr im[128]; + size_t textlen; +#else + (void)x_image_ofset; + (void)y_image_ofset; +#endif /* HAVE_IMLIB */ if(!str) return; /* To draw image everywhere we can draw text */ #ifdef HAVE_IMLIB - char *ostr = NULL; - int i, ni, sw = 0; - ImageAttr im[128]; ostr = xstrdup(str); + textlen = strlen(ostr); if(strstr(str, "i[")) { @@ -92,7 +98,7 @@ draw_image_ofset_text(Drawable d, int x, int y, char* fg, int pad, char *str, in #ifdef HAVE_IMLIB if(strstr(ostr, "i[")) - strcpy(str, ostr); + strncpy(str, ostr, textlen); IFREE(ostr); #endif /* HAVE_IMLIB */ @@ -195,16 +201,20 @@ ushort textw(char *text) { XGlyphInfo gl; +#ifdef HAVE_IMLIB + char *ostr = NULL; + ImageAttr im[128]; + size_t textlen; +#endif /* HAVE_IMLIB */ if(!text) return 0; -#ifdef HAVE_IMLIB - char *ostr = NULL; - ImageAttr im[128]; +#ifdef HAVE_IMLIB ostr = xstrdup(text); + textlen = strlen(ostr); if(strstr(text, "i[")) parse_image_block(im, text); @@ -214,7 +224,7 @@ textw(char *text) #ifdef HAVE_IMLIB if(strstr(ostr, "i[")) - strcpy(text, ostr); + strncpy(text, ostr, textlen); IFREE(ostr); #endif /* HAVE_IMLIB */ diff --git a/src/launcher.c b/src/launcher.c index 1fcd5aa..96a5bab 100644 --- a/src/launcher.c +++ b/src/launcher.c @@ -156,7 +156,7 @@ launcher_execute(Launcher *launcher) else { tabhits = 1; - strcpy(tmpbuf, buf); + strncpy(tmpbuf, buf, sizeof(tmpbuf)); } @@ -169,7 +169,7 @@ launcher_execute(Launcher *launcher) if (complete) { - strcpy(buf, tmpbuf); + strncpy(buf, tmpbuf, sizeof(buf)); strncat(buf, complete, sizeof(buf)); found = True; free(complete); diff --git a/src/screen.c b/src/screen.c index d73f647..4ac3205 100644 --- a/src/screen.c +++ b/src/screen.c @@ -91,6 +91,8 @@ screen_get_geo(int s) XFree(xsi); } +#else + (void)s; #endif /* HAVE_XINERAMA */ return geo; diff --git a/src/status.c b/src/status.c index e8fa792..e2cc896 100644 --- a/src/status.c +++ b/src/status.c @@ -158,11 +158,11 @@ statustext_normal(int sc, char *str) /* Draw normal text without any blocks */ draw_text(infobar[sc].bar->dr, (sgeo[sc].width - SHADH) - (textw(strwc) + sw), - FHINFOBAR, infobar[sc].bar->fg, 0, strwc); + FHINFOBAR, infobar[sc].bar->fg, strwc); if(n) { - strcpy(buf, strwc); + strncpy(buf, strwc, sizeof(buf)); for(i = k = 0; i < (int)strlen(str); ++i, ++k) if(str[i] == '\\' && str[i + 1] == '#' && str[i + 8] == '\\') @@ -177,9 +177,9 @@ statustext_normal(int sc, char *str) /* Draw text with its color */ draw_text(infobar[sc].bar->dr, (sgeo[sc].width - SHADH) - (textw(&buf[k]) + sw), - FHINFOBAR, col, 0, &buf[k]); + FHINFOBAR, col, &buf[k]); - strcpy(buf, strwc); + strncpy(buf, strwc, sizeof(buf)); ++i; } } @@ -233,7 +233,7 @@ statustext_handle(int sc, char *str) /* Draw located text with stored properties. */ for(i = 0; i < ns; ++i) - draw_text(infobar[sc].bar->dr, s[i].x - sw, s[i].y, s[i].color, 0, s[i].text); + draw_text(infobar[sc].bar->dr, s[i].x - sw, s[i].y, s[i].color, s[i].text); barwin_refresh(infobar[sc].bar); diff --git a/src/tag.c b/src/tag.c index c8a7c57..1dd5324 100644 --- a/src/tag.c +++ b/src/tag.c @@ -625,11 +625,22 @@ void uicb_tag_rename(uicb_t cmd) { screen_get_sel(); + size_t len; + char *str; - if(!cmd || !strlen(cmd)) + if(!cmd || !(len = strlen(cmd))) return; - strcpy(tags[selscreen][seltag[selscreen]].name, cmd); + str = tags[selscreen][seltag[selscreen]].name; + len = strlen(str); + + /* TODO: if strlen(cmd) > len, the tag name + * will be truncated... + * We can't do a realloc because if the pointer change + * free() on paser will segfault.on free_conf()... + */ + strncpy(str, cmd, len); + infobar_update_taglist(selscreen); infobar_draw(selscreen); diff --git a/src/util.c b/src/util.c index 044c1ef..f6527cf 100644 --- a/src/util.c +++ b/src/util.c @@ -417,7 +417,7 @@ patht(char *path) if(!path) return NULL; - strcpy(ret, path); + strncpy(ret, path, sizeof(ret)); if(strstr(path, "~/")) sprintf(ret, "%s/%s", getenv("HOME"), path + 2); diff --git a/src/viwmfs.c b/src/viwmfs.c index 41dd02e..a8fc7dd 100644 --- a/src/viwmfs.c +++ b/src/viwmfs.c @@ -103,7 +103,7 @@ viwmfs(int argc, char **argv) } } else - strcpy(str, argv[2]); + strncpy(str, argv[2], sizeof(str)); if(!strcmp(str, "help")) { diff --git a/src/wmfs.c b/src/wmfs.c index c41226a..d8354f0 100644 --- a/src/wmfs.c +++ b/src/wmfs.c @@ -466,7 +466,7 @@ main(int argc, char **argv) break; case 'C': - strcpy(conf.confpath, optarg); + strncpy(conf.confpath, optarg, sizeof(conf.confpath)); break; case 'c': diff --git a/src/wmfs.h b/src/wmfs.h index d590d22..76106c7 100644 --- a/src/wmfs.h +++ b/src/wmfs.h @@ -144,8 +144,8 @@ void barwin_refresh_color(BarWindow *bw); void barwin_refresh(BarWindow *bw); /* draw.c */ -void draw_text(Drawable d, int x, int y, char* fg, int pad, char *str); -void draw_image_ofset_text(Drawable d, int x, int y, char* fg, int pad, char *str, int x_image_ofset, int y_image_ofset); +void draw_text(Drawable d, int x, int y, char* fg, char *str); +void draw_image_ofset_text(Drawable d, int x, int y, char* fg, char *str, int x_image_ofset, int y_image_ofset); void draw_rectangle(Drawable dr, int x, int y, uint w, uint h, uint color); void draw_graph(Drawable dr, int x, int y, uint w, uint h, uint color, char *data);