JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
check to see if there is actual data to use before proceeding
[spectrwm.git] / spectrwm.c
index ba61a53..92576fe 100644 (file)
@@ -3778,14 +3778,15 @@ get_win_name(xcb_window_t win)
 
        c = xcb_icccm_get_wm_name(conn, win);
        if (xcb_icccm_get_wm_name_reply(conn, c, &r, NULL)) {
-               name = malloc(r.name_len + 1);
-               if (!name) {
-                       xcb_get_text_property_reply_wipe(&r);
-                       return (NULL);
+               if (r.name_len > 0) {
+                       name = malloc(r.name_len + 1);
+                       if (!name) {
+                               xcb_get_text_property_reply_wipe(&r);
+                               return (NULL);
+                       }
+                       memcpy(name, r.name, r.name_len);
+                       name[r.name_len] = '\0';
                }
-               memcpy(name, r.name, r.name_len);
-               name[r.name_len] = '\0';
-               
                xcb_get_text_property_reply_wipe(&r);
        }
 
@@ -6394,6 +6395,7 @@ manage_window(xcb_window_t id)
        int                     i, ws_idx, border_me = 0;
        xcb_atom_t              ws_idx_atom = XCB_ATOM_NONE;
        char                    ws_idx_str[SWM_PROPLEN], *prop = NULL;
+       size_t                  proplen;
        struct swm_region       *r;
        const char              *errstr;
        struct pid_e            *p;
@@ -6449,21 +6451,25 @@ manage_window(xcb_window_t id)
 
        /* Get all the window data in one shot */
        ws_idx_atom = get_atom_from_string("_SWM_WS");
+       fprintf(stderr, "ws_idx_atom: %d\n", ws_idx_atom);
        if (ws_idx_atom) {
                gpr = xcb_get_property_reply(conn,
                        xcb_get_property(conn, False, id, ws_idx_atom,
                                XCB_ATOM_STRING, 0, SWM_PROPLEN),
                        NULL);
                if (gpr) {
-                       prop = malloc(xcb_get_property_value_length(gpr) + 1);
-                       if (prop) {
-                               memcpy(prop, xcb_get_property_value(gpr),
-                                       xcb_get_property_value_length(gpr));
-                               prop[xcb_get_property_value_length(gpr)] = '\0';
+                       proplen = xcb_get_property_value_length(gpr);
+                       if (proplen > 0) {
+                               prop = malloc(proplen + 1);
+                               if (prop) {
+                                       memcpy(prop,
+                                           xcb_get_property_value(gpr),
+                                           proplen);   
+                                       prop[proplen] = '\0';
+                               }
                        }
                        free(gpr);
                }
-               
        }
        win->wa = xcb_get_geometry_reply(conn,
                xcb_get_geometry(conn, id),