From daeffb324e945fd0105c25e98ec4c858ea1d6bff Mon Sep 17 00:00:00 2001 From: Philippe Pepiot Date: Fri, 19 Nov 2010 19:55:57 +0100 Subject: [PATCH] Fix possibles segfaults, dead assignment and other division by zero. Thanks to clang build report --- src/event.c | 6 ++---- src/infobar.c | 4 ++-- src/launcher.c | 11 ++++++----- src/layout.c | 10 ++++++++-- src/parse.c | 2 +- src/status.c | 3 +-- src/tag.c | 4 ++-- src/wmfs.c | 3 +-- 8 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/event.c b/src/event.c index 165005e..e1e0989 100644 --- a/src/event.c +++ b/src/event.c @@ -370,7 +370,6 @@ void enternotify(XCrossingEvent *ev) { Client *c; - Systray *s; int n; if((ev->mode != NotifyNormal @@ -379,7 +378,7 @@ enternotify(XCrossingEvent *ev) return; /* Don't handle EnterNotify event if it's about systray */ - if((s = systray_find(ev->window)) || ev->window == traywin) + if(systray_find(ev->window) || ev->window == traywin) return; if(conf.focus_fmouse) @@ -525,7 +524,6 @@ void maprequest(XMapRequestEvent *ev) { XWindowAttributes at; - Client *c; Systray *s; CHECK(XGetWindowAttributes(dpy, ev->window, &at)); @@ -536,7 +534,7 @@ maprequest(XMapRequestEvent *ev) ewmh_send_message(s->win, s->win, "_XEMBED", CurrentTime, XEMBED_WINDOW_ACTIVATE, 0, 0, 0); systray_update(); } - else if(!(c = client_gb_win(ev->window))) + else if(!client_gb_win(ev->window)) client_manage(ev->window, &at, True); return; diff --git a/src/infobar.c b/src/infobar.c index 50935c4..d89b8ef 100644 --- a/src/infobar.c +++ b/src/infobar.c @@ -220,7 +220,7 @@ infobar_draw_selbar(int sc) void infobar_draw_taglist(int sc) { - int i, x, j; + int i, x; Client *c = NULL; Bool is_occupied[MAXTAG + 1]; @@ -234,7 +234,7 @@ infobar_draw_taglist(int sc) if(c->screen == sc) is_occupied[c->tag] = True; - for(i = 1, x = j = 0; i < conf.ntag[sc] + 1; ++i) + for(i = 1, x = 0; i < conf.ntag[sc] + 1; ++i) { /* Autohide tag feature */ if(conf.tagautohide) diff --git a/src/launcher.c b/src/launcher.c index 96a5bab..aab5566 100644 --- a/src/launcher.c +++ b/src/launcher.c @@ -179,7 +179,7 @@ launcher_execute(Launcher *launcher) lastwastab = True; /* start a new round of tabbing */ - if (!found) + if (found == False) tabhits = 0; pos = strlen(buf); @@ -280,19 +280,20 @@ complete_on_command(char *start, size_t hits) } dirname = strtok(NULL, ":"); } - qsort(namelist, n, sizeof(char *), qsort_string_compare); free(path); if(n > 0) { - ret = xstrdup(namelist[((hits > 0) ? hits - 1 : 0) % n] + strlen(start)); + qsort(namelist, n, sizeof(char *), qsort_string_compare); + ret = xstrdup(namelist[((hits > 0) ? hits - 1 : 0) % n] + strlen(start)); for(i = 0; i < n; i++) - free(namelist[i]); + free(namelist[i]); + + free(namelist); } - free(namelist); return ret; } diff --git a/src/layout.c b/src/layout.c index fcd92ac..6cf9d1f 100644 --- a/src/layout.c +++ b/src/layout.c @@ -325,7 +325,10 @@ multi_tile(int screen, Position type) { if(type == Top) mastergeo.y = (n <= nmaster) ? (uint)sg.y : sg.y + (sg.height - mwfact) - BORDH; - mastergeo.width = (sg.width / nmaster) - (BORDH * 4); + if (nmaster != 0) + mastergeo.width = (sg.width / nmaster) - (BORDH * 4); + else + mastergeo.width = sg.width - (BORDH * 4); mastergeo.height = (n <= nmaster) ? (uint)(sg.height - BORDH) : mwfact; } else @@ -333,7 +336,10 @@ multi_tile(int screen, Position type) if(type == Left) mastergeo.x = (n <= nmaster) ? (uint)sg.x : (sg.x + sg.width) - mwfact - (BORDH * 2); mastergeo.width = (n <= nmaster) ? (uint)(sg.width - (BORDH * 2)) : mwfact; - mastergeo.height = (sg.height / nmaster) - BORDH; + if (nmaster != 0) + mastergeo.height = sg.height - BORDH; + else + mastergeo.height = BORDH; } /* TILED SIZE */ diff --git a/src/parse.c b/src/parse.c index 3de5f7f..dcca36c 100644 --- a/src/parse.c +++ b/src/parse.c @@ -100,7 +100,7 @@ push_keyword(struct keyword *tail, enum keyword_t type, char *buf, size_t *offse if (*offset != 0) { buf[*offset] = '\0'; if (!strcmp(buf, INCLUDE_CMD)) - type = kw->type = INCLUDE; + kw->type = INCLUDE; else kw->name = strdup(buf); *offset = 0; diff --git a/src/status.c b/src/status.c index e2cc896..ea78f17 100644 --- a/src/status.c +++ b/src/status.c @@ -195,7 +195,7 @@ void statustext_handle(int sc, char *str) { char *lastst; - int i, nr, ng, ns, len, sw = 0; + int i, nr, ng, ns, sw = 0; StatusRec r[128]; StatusGraph g[128]; StatusText s[128]; @@ -213,7 +213,6 @@ statustext_handle(int sc, char *str) lastst = infobar[sc].statustext; infobar[sc].statustext = xstrdup(str); - len = ((strlen(str) > MAXSTATUS) ? MAXSTATUS : strlen(str)); /* Store rectangles, located text & images properties. */ nr = statustext_rectangle(r, str); diff --git a/src/tag.c b/src/tag.c index 1dd5324..be6ca1c 100644 --- a/src/tag.c +++ b/src/tag.c @@ -625,10 +625,10 @@ void uicb_tag_rename(uicb_t cmd) { screen_get_sel(); - size_t len; char *str; + size_t len; - if(!cmd || !(len = strlen(cmd))) + if(!cmd || !strlen(cmd)) return; str = tags[selscreen][seltag[selscreen]].name; diff --git a/src/wmfs.c b/src/wmfs.c index d8354f0..0cbc3cb 100644 --- a/src/wmfs.c +++ b/src/wmfs.c @@ -36,7 +36,6 @@ int errorhandler(Display *d, XErrorEvent *event) { char mess[256]; - Client *c; /* Check if there is another WM running */ if(BadAccess == event->error_code @@ -48,7 +47,7 @@ errorhandler(Display *d, XErrorEvent *event) * 42 = X_SetInputFocus * 28 = X_GrabButton */ - if((c = client_gb_win(event->resourceid))) + if(client_gb_win(event->resourceid)) if(event->error_code == BadWindow || event->request_code == 42 || event->request_code == 28)