mirror of
https://github.com/vale981/bspwm
synced 2025-03-05 09:51:38 -05:00
Try to address the potential buffer overflows
This commit is contained in:
parent
e08cecaa05
commit
36140fe1c3
7 changed files with 46 additions and 37 deletions
16
bspc.c
16
bspc.c
|
@ -19,18 +19,22 @@ int main(int argc, char *argv[])
|
|||
|
||||
char *sp = getenv(SOCKET_ENV_VAR);
|
||||
|
||||
strcpy(socket_path, (sp == NULL ? DEFAULT_SOCKET_PATH : sp));
|
||||
strncpy(socket_path, (sp == NULL ? DEFAULT_SOCKET_PATH : sp), sizeof(socket_path));
|
||||
|
||||
msg[0] = '\0';
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
strcat(msg, argv[i]);
|
||||
if (i < (argc - 1))
|
||||
strcat(msg, TOKEN_SEP);
|
||||
int max = sizeof(msg);
|
||||
for (i = 1; max > 0 && i < argc; i++) {
|
||||
strncat(msg, argv[i], max);
|
||||
max -= strlen(argv[i]);
|
||||
if (i < (argc - 1)) {
|
||||
strncat(msg, TOKEN_SEP, max);
|
||||
max -= strlen(TOKEN_SEP);
|
||||
}
|
||||
}
|
||||
|
||||
sock_address.sun_family = AF_UNIX;
|
||||
strcpy(sock_address.sun_path, socket_path);
|
||||
strncpy(sock_address.sun_path, socket_path, sizeof(sock_address.sun_path));
|
||||
|
||||
sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
connect(sock_fd, (struct sockaddr *) &sock_address, sizeof(sock_address));
|
||||
|
|
6
bspwm.c
6
bspwm.c
|
@ -106,10 +106,10 @@ int main(void)
|
|||
|
||||
char *sp = getenv(SOCKET_ENV_VAR);
|
||||
|
||||
strcpy(socket_path, (sp == NULL ? DEFAULT_SOCKET_PATH : sp));
|
||||
strncpy(socket_path, (sp == NULL ? DEFAULT_SOCKET_PATH : sp), sizeof(socket_path));
|
||||
|
||||
sock_address.sun_family = AF_UNIX;
|
||||
strcpy(sock_address.sun_path, socket_path);
|
||||
strncpy(sock_address.sun_path, socket_path, sizeof(sock_address.sun_path));
|
||||
unlink(socket_path);
|
||||
|
||||
sock_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||
|
@ -141,7 +141,7 @@ int main(void)
|
|||
ret_fd = accept(sock_fd, NULL, 0);
|
||||
if (ret_fd > 0 && (nbr = recv(ret_fd, msg, sizeof(msg), 0)) > 0) {
|
||||
msg[nbr] = '\0';
|
||||
strcpy(rsp, EMPTY_RESPONSE);
|
||||
strncpy(rsp, EMPTY_RESPONSE, sizeof(rsp));
|
||||
process_message(msg, rsp);
|
||||
send(ret_fd, rsp, strlen(rsp), 0);
|
||||
close(ret_fd);
|
||||
|
|
2
events.c
2
events.c
|
@ -75,7 +75,7 @@ void map_request(xcb_generic_event_t *evt)
|
|||
|
||||
xcb_icccm_get_wm_class_reply_t reply;
|
||||
if (xcb_icccm_get_wm_class_reply(dpy, xcb_icccm_get_wm_class(dpy, win), &reply, NULL) == 1) {
|
||||
strcpy(c->class_name, reply.class_name);
|
||||
strncpy(c->class_name, reply.class_name, sizeof(c->class_name));
|
||||
xcb_icccm_get_wm_class_reply_wipe(&reply);
|
||||
}
|
||||
|
||||
|
|
35
messages.c
35
messages.c
|
@ -26,7 +26,7 @@ void process_message(char *msg, char *rsp)
|
|||
} else if (strcmp(cmd, "set") == 0) {
|
||||
char *name = strtok(NULL, TOKEN_SEP);
|
||||
char *value = strtok(NULL, TOKEN_SEP);
|
||||
set_setting(name, value);
|
||||
set_setting(name, value, rsp);
|
||||
return;
|
||||
} else if (strcmp(cmd, "dump") == 0) {
|
||||
dump_tree(desk, desk->root, rsp, 0);
|
||||
|
@ -126,7 +126,7 @@ void process_message(char *msg, char *rsp)
|
|||
if (d != NULL) {
|
||||
char *new_name = strtok(NULL, TOKEN_SEP);
|
||||
if (new_name != NULL) {
|
||||
strcpy(d->name, new_name);
|
||||
strncpy(d->name, new_name, sizeof(d->name));
|
||||
ewmh_update_desktop_names();
|
||||
}
|
||||
}
|
||||
|
@ -163,13 +163,13 @@ void process_message(char *msg, char *rsp)
|
|||
char *name = strtok(NULL, TOKEN_SEP);
|
||||
if (name != NULL) {
|
||||
rule_t *rule = make_rule();
|
||||
strcpy(rule->cause.name, name);
|
||||
strncpy(rule->cause.name, name, sizeof(rule->cause.name));
|
||||
char *arg = strtok(NULL, TOKEN_SEP);
|
||||
while (arg != NULL) {
|
||||
if (strcmp(arg, "floating") == 0) {
|
||||
rule->effect.floating = true;
|
||||
} else {
|
||||
strcpy(rule->effect.desk_name, arg);
|
||||
strncpy(rule->effect.desk_name, arg, sizeof(rule->effect.desk_name));
|
||||
}
|
||||
arg = strtok(NULL, TOKEN_SEP);
|
||||
}
|
||||
|
@ -208,14 +208,14 @@ void process_message(char *msg, char *rsp)
|
|||
quit();
|
||||
return;
|
||||
} else {
|
||||
sprintf(rsp, "unknown command: %s\n", cmd);
|
||||
snprintf(rsp, BUFSIZ, "unknown command: %s\n", cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
}
|
||||
|
||||
void set_setting(char *name, char *value)
|
||||
void set_setting(char *name, char *value, char *rsp)
|
||||
{
|
||||
if (name == NULL || value == NULL)
|
||||
return;
|
||||
|
@ -245,37 +245,40 @@ void set_setting(char *name, char *value)
|
|||
sscanf(value, "%i", &bottom_padding);
|
||||
update_root_dimensions();
|
||||
} else if (strcmp(name, "active_border_color") == 0) {
|
||||
strcpy(active_border_color, value);
|
||||
strncpy(active_border_color, value, sizeof(active_border_color));
|
||||
active_border_color_pxl = get_color(active_border_color);
|
||||
} else if (strcmp(name, "normal_border_color") == 0) {
|
||||
strcpy(normal_border_color, value);
|
||||
strncpy(normal_border_color, value, sizeof(normal_border_color));
|
||||
normal_border_color_pxl = get_color(normal_border_color);
|
||||
} else if (strcmp(name, "inner_border_color") == 0) {
|
||||
strcpy(inner_border_color, value);
|
||||
strncpy(inner_border_color, value, sizeof(inner_border_color));
|
||||
inner_border_color_pxl = get_color(inner_border_color);
|
||||
} else if (strcmp(name, "outer_border_color") == 0) {
|
||||
strcpy(outer_border_color, value);
|
||||
strncpy(outer_border_color, value, sizeof(outer_border_color));
|
||||
outer_border_color_pxl = get_color(outer_border_color);
|
||||
} else if (strcmp(name, "presel_border_color") == 0) {
|
||||
strcpy(presel_border_color, value);
|
||||
strncpy(presel_border_color, value, sizeof(presel_border_color));
|
||||
presel_border_color_pxl = get_color(presel_border_color);
|
||||
} else if (strcmp(name, "active_locked_border_color") == 0) {
|
||||
strcpy(active_locked_border_color, value);
|
||||
strncpy(active_locked_border_color, value, sizeof(active_locked_border_color));
|
||||
active_locked_border_color_pxl = get_color(active_locked_border_color);
|
||||
} else if (strcmp(name, "normal_locked_border_color") == 0) {
|
||||
strcpy(normal_locked_border_color, value);
|
||||
strncpy(normal_locked_border_color, value, sizeof(normal_locked_border_color));
|
||||
normal_locked_border_color_pxl = get_color(normal_locked_border_color);
|
||||
} else if (strcmp(name, "urgent_border_color") == 0) {
|
||||
strcpy(urgent_border_color, value);
|
||||
strncpy(urgent_border_color, value, sizeof(urgent_border_color));
|
||||
urgent_border_color_pxl = get_color(urgent_border_color);
|
||||
} else if (strcmp(name, "borderless_monocle") == 0) {
|
||||
bool b;
|
||||
if (parse_bool(value, &b))
|
||||
borderless_monocle = b;
|
||||
} else if (strcmp(name, "wm_name") == 0) {
|
||||
strcpy(wm_name, value);
|
||||
strncpy(wm_name, value, sizeof(wm_name));
|
||||
ewmh_update_wm_name();
|
||||
return;
|
||||
} else {
|
||||
snprintf(rsp, BUFSIZ, "unknown setting: %s\n", name);
|
||||
return;
|
||||
}
|
||||
|
||||
apply_layout(desk, desk->root, root_rect);
|
||||
|
@ -324,6 +327,8 @@ void get_setting(char *name, char* rsp)
|
|||
sprintf(rsp, "%s\n", BOOLSTR(borderless_monocle));
|
||||
else if (strcmp(name, "wm_name") == 0)
|
||||
sprintf(rsp, "%s\n", wm_name);
|
||||
else
|
||||
snprintf(rsp, BUFSIZ, "unknown setting: %s\n", name);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
void process_message(char*, char*);
|
||||
void get_setting(char*, char*);
|
||||
void set_setting(char*, char*);
|
||||
void set_setting(char*, char*, char*);
|
||||
bool parse_bool(char *, bool *);
|
||||
bool parse_layout(char *, layout_t *);
|
||||
bool parse_direction(char *, direction_t *);
|
||||
|
|
18
settings.c
18
settings.c
|
@ -32,14 +32,14 @@ void run_autostart(void)
|
|||
|
||||
void load_settings(void)
|
||||
{
|
||||
strcpy(normal_border_color, NORMAL_BORDER_COLOR);
|
||||
strcpy(active_border_color, ACTIVE_BORDER_COLOR);
|
||||
strcpy(inner_border_color, INNER_BORDER_COLOR);
|
||||
strcpy(outer_border_color, OUTER_BORDER_COLOR);
|
||||
strcpy(presel_border_color, PRESEL_BORDER_COLOR);
|
||||
strcpy(active_locked_border_color, ACTIVE_LOCKED_BORDER_COLOR);
|
||||
strcpy(normal_locked_border_color, NORMAL_LOCKED_BORDER_COLOR);
|
||||
strcpy(urgent_border_color, URGENT_BORDER_COLOR);
|
||||
strncpy(normal_border_color, NORMAL_BORDER_COLOR, sizeof(normal_border_color));
|
||||
strncpy(active_border_color, ACTIVE_BORDER_COLOR, sizeof(active_border_color));
|
||||
strncpy(inner_border_color, INNER_BORDER_COLOR, sizeof(inner_border_color));
|
||||
strncpy(outer_border_color, OUTER_BORDER_COLOR, sizeof(outer_border_color));
|
||||
strncpy(presel_border_color, PRESEL_BORDER_COLOR, sizeof(presel_border_color));
|
||||
strncpy(active_locked_border_color, ACTIVE_LOCKED_BORDER_COLOR, sizeof(active_locked_border_color));
|
||||
strncpy(normal_locked_border_color, NORMAL_LOCKED_BORDER_COLOR, sizeof(normal_locked_border_color));
|
||||
strncpy(urgent_border_color, URGENT_BORDER_COLOR, sizeof(urgent_border_color));
|
||||
|
||||
normal_border_color_pxl = get_color(normal_border_color);
|
||||
active_border_color_pxl = get_color(active_border_color);
|
||||
|
@ -50,7 +50,7 @@ void load_settings(void)
|
|||
normal_locked_border_color_pxl = get_color(normal_locked_border_color);
|
||||
urgent_border_color_pxl = get_color(urgent_border_color);
|
||||
|
||||
strcpy(wm_name, WM_NAME);
|
||||
strncpy(wm_name, WM_NAME, sizeof(wm_name));
|
||||
|
||||
inner_border_width = INNER_BORDER_WIDTH;
|
||||
main_border_width = MAIN_BORDER_WIDTH;
|
||||
|
|
4
types.c
4
types.c
|
@ -19,7 +19,7 @@ node_t *make_node(void)
|
|||
desktop_t *make_desktop(const char *name)
|
||||
{
|
||||
desktop_t *d = malloc(sizeof(desktop_t));
|
||||
strcpy(d->name, name);
|
||||
strncpy(d->name, name, sizeof(d->name));
|
||||
d->layout = LAYOUT_TILED;
|
||||
d->prev = d->next = NULL;
|
||||
d->root = d->focus = d->last_focus = NULL;
|
||||
|
@ -29,7 +29,7 @@ desktop_t *make_desktop(const char *name)
|
|||
client_t *make_client(xcb_window_t win)
|
||||
{
|
||||
client_t *c = malloc(sizeof(client_t));
|
||||
strcpy(c->class_name, MISSING_VALUE);
|
||||
strncpy(c->class_name, MISSING_VALUE, sizeof(c->class_name));
|
||||
c->border_width = border_width;
|
||||
c->window = win;
|
||||
c->floating = c->transient = c->fullscreen = c->locked = c->urgent = false;
|
||||
|
|
Loading…
Add table
Reference in a new issue