From c85d16faa4fa3fc34b35782d2281b5852e5a429b Mon Sep 17 00:00:00 2001 From: shdown <shdownnine@gmail.com> Date: Mon, 3 Aug 2015 12:50:50 +0300 Subject: [PATCH] Use safe wrappers wherever possible --- i3-config-wizard/main.c | 2 +- i3-input/main.c | 18 +++++++++--------- i3-msg/main.c | 3 +-- i3-nagbar/main.c | 4 ++-- i3bar/src/child.c | 6 +++--- i3bar/src/xcb.c | 3 +-- libi3/get_exe_path.c | 2 +- libi3/root_atom_contents.c | 14 +++----------- src/bindings.c | 4 ++-- src/config_parser.c | 4 ++-- src/ipc.c | 2 +- src/startup.c | 10 ++-------- src/util.c | 2 +- src/window.c | 9 ++------- 14 files changed, 31 insertions(+), 52 deletions(-) diff --git a/i3-config-wizard/main.c b/i3-config-wizard/main.c index 813be661..bd9aa28a 100644 --- a/i3-config-wizard/main.c +++ b/i3-config-wizard/main.c @@ -768,7 +768,7 @@ int main(int argc, char *argv[]) { switch (o) { case 's': FREE(socket_path); - socket_path = strdup(optarg); + socket_path = sstrdup(optarg); break; case 'v': printf("i3-config-wizard " I3_VERSION "\n"); diff --git a/i3-input/main.c b/i3-input/main.c index 6736aad3..cf3884e9 100644 --- a/i3-input/main.c +++ b/i3-input/main.c @@ -103,7 +103,7 @@ static void restore_input_focus(void) { * */ static uint8_t *concat_strings(char **glyphs, int max) { - uint8_t *output = calloc(max + 1, 4); + uint8_t *output = scalloc(max + 1, 4); uint8_t *walk = output; for (int c = 0; c < max; c++) { printf("at %c\n", glyphs[c][0]); @@ -187,10 +187,10 @@ static void finish_input() { /* allocate space for the output */ int inputlen = strlen(command); - char *full = calloc(1, - strlen(format) - (2 * cnt) /* format without all %s */ - + (inputlen * cnt) /* replaced %s */ - + 1); /* trailing NUL */ + char *full = scalloc(strlen(format) - (2 * cnt) /* format without all %s */ + + (inputlen * cnt) /* replaced %s */ + + 1, /* trailing NUL */ + 1); char *dest = full; for (c = 0; c < len; c++) { /* if this is not % or it is % but without a following 's', @@ -359,7 +359,7 @@ free_resources: } int main(int argc, char *argv[]) { - format = strdup("%s"); + format = sstrdup("%s"); socket_path = getenv("I3SOCK"); char *pattern = sstrdup("pango:monospace 8"); int o, option_index = 0; @@ -381,7 +381,7 @@ int main(int argc, char *argv[]) { switch (o) { case 's': FREE(socket_path); - socket_path = strdup(optarg); + socket_path = sstrdup(optarg); break; case 'v': printf("i3-input " I3_VERSION); @@ -401,11 +401,11 @@ int main(int argc, char *argv[]) { break; case 'f': FREE(pattern); - pattern = strdup(optarg); + pattern = sstrdup(optarg); break; case 'F': FREE(format); - format = strdup(optarg); + format = sstrdup(optarg); break; case 'h': printf("i3-input " I3_VERSION "\n"); diff --git a/i3-msg/main.c b/i3-msg/main.c index 3f195d41..47e7ae91 100644 --- a/i3-msg/main.c +++ b/i3-msg/main.c @@ -187,8 +187,7 @@ int main(int argc, char *argv[]) { payload = sstrdup(argv[optind]); } else { char *both; - if (asprintf(&both, "%s %s", payload, argv[optind]) == -1) - err(EXIT_FAILURE, "asprintf"); + sasprintf(&both, "%s %s", payload, argv[optind]); free(payload); payload = both; } diff --git a/i3-nagbar/main.c b/i3-nagbar/main.c index aca70ab1..d86cd69a 100644 --- a/i3-nagbar/main.c +++ b/i3-nagbar/main.c @@ -371,7 +371,7 @@ int main(int argc, char *argv[]) { if (argv0_len > strlen(".nagbar_cmd") && strcmp(argv[0] + argv0_len - strlen(".nagbar_cmd"), ".nagbar_cmd") == 0) { unlink(argv[0]); - cmd = strdup(argv[0]); + cmd = sstrdup(argv[0]); *(cmd + argv0_len - strlen(".nagbar_cmd")) = '\0'; execl("/bin/sh", "/bin/sh", cmd, NULL); err(EXIT_FAILURE, "execv(/bin/sh, /bin/sh, %s)", cmd); @@ -418,7 +418,7 @@ int main(int argc, char *argv[]) { printf("i3-nagbar [-m <message>] [-b <button> <action>] [-t warning|error] [-f <font>] [-v]\n"); return 0; case 'b': - buttons = realloc(buttons, sizeof(button_t) * (buttoncnt + 1)); + buttons = srealloc(buttons, sizeof(button_t) * (buttoncnt + 1)); buttons[buttoncnt].label = i3string_from_utf8(optarg); buttons[buttoncnt].action = argv[optind]; printf("button with label *%s* and action *%s*\n", diff --git a/i3bar/src/child.c b/i3bar/src/child.c index 78354685..cfc96d5f 100644 --- a/i3bar/src/child.c +++ b/i3bar/src/child.c @@ -220,21 +220,21 @@ static int stdin_string(void *context, const unsigned char *val, size_t len) { return 1; } if (strcasecmp(ctx->last_map_key, "min_width") == 0) { - char *copy = (char *)malloc(len + 1); + char *copy = (char *)smalloc(len + 1); strncpy(copy, (const char *)val, len); copy[len] = 0; ctx->block.min_width_str = copy; return 1; } if (strcasecmp(ctx->last_map_key, "name") == 0) { - char *copy = (char *)malloc(len + 1); + char *copy = (char *)smalloc(len + 1); strncpy(copy, (const char *)val, len); copy[len] = 0; ctx->block.name = copy; return 1; } if (strcasecmp(ctx->last_map_key, "instance") == 0) { - char *copy = (char *)malloc(len + 1); + char *copy = (char *)smalloc(len + 1); strncpy(copy, (const char *)val, len); copy[len] = 0; ctx->block.instance = copy; diff --git a/i3bar/src/xcb.c b/i3bar/src/xcb.c index cbb28903..f90bbcee 100644 --- a/i3bar/src/xcb.c +++ b/i3bar/src/xcb.c @@ -1654,8 +1654,7 @@ void reconfig_windows(bool redraw_bars) { "i3bar\0i3bar\0"); char *name; - if (asprintf(&name, "i3bar for output %s", walk->name) == -1) - err(EXIT_FAILURE, "asprintf()"); + sasprintf(&name, "i3bar for output %s", walk->name); xcb_void_cookie_t name_cookie; name_cookie = xcb_change_property(xcb_connection, XCB_PROP_MODE_REPLACE, diff --git a/libi3/get_exe_path.c b/libi3/get_exe_path.c index fc9b3014..ef8f23bc 100644 --- a/libi3/get_exe_path.c +++ b/libi3/get_exe_path.c @@ -73,7 +73,7 @@ char *get_exe_path(const char *argv0) { } sasprintf(&path, ":%s", tmp); } else { - path = strdup(path); + path = sstrdup(path); } const char *component; char *str = path; diff --git a/libi3/root_atom_contents.c b/libi3/root_atom_contents.c index df54ef09..d91f1e15 100644 --- a/libi3/root_atom_contents.c +++ b/libi3/root_atom_contents.c @@ -80,18 +80,10 @@ char *root_atom_contents(const char *atomname, xcb_connection_t *provided_conn, if (prop_reply->type == XCB_ATOM_CARDINAL) { /* We treat a CARDINAL as a >= 32-bit unsigned int. The only CARDINAL * we query is I3_PID, which is 32-bit. */ - if (asprintf(&content, "%u", *((unsigned int *)xcb_get_property_value(prop_reply))) == -1) { - free(atom_reply); - free(prop_reply); - return NULL; - } + sasprintf(&content, "%u", *((unsigned int *)xcb_get_property_value(prop_reply))); } else { - if (asprintf(&content, "%.*s", xcb_get_property_value_length(prop_reply), - (char *)xcb_get_property_value(prop_reply)) == -1) { - free(atom_reply); - free(prop_reply); - return NULL; - } + sasprintf(&content, "%.*s", xcb_get_property_value_length(prop_reply), + (char *)xcb_get_property_value(prop_reply)); } if (provided_conn == NULL) xcb_disconnect(conn); diff --git a/src/bindings.c b/src/bindings.c index 1623e98e..8e8e9feb 100644 --- a/src/bindings.c +++ b/src/bindings.c @@ -393,9 +393,9 @@ static Binding *binding_copy(Binding *bind) { Binding *ret = smalloc(sizeof(Binding)); *ret = *bind; if (bind->symbol != NULL) - ret->symbol = strdup(bind->symbol); + ret->symbol = sstrdup(bind->symbol); if (bind->command != NULL) - ret->command = strdup(bind->command); + ret->command = sstrdup(bind->command); if (bind->translated_to != NULL) { ret->translated_to = smalloc(sizeof(xcb_keycode_t) * bind->number_keycodes); memcpy(ret->translated_to, bind->translated_to, sizeof(xcb_keycode_t) * bind->number_keycodes); diff --git a/src/config_parser.c b/src/config_parser.c index d8891955..4e16f060 100644 --- a/src/config_parser.c +++ b/src/config_parser.c @@ -789,12 +789,12 @@ static char *migrate_config(char *input, off_t size) { /* read the script’s output */ int conv_size = 65535; - char *converted = malloc(conv_size); + char *converted = smalloc(conv_size); int read_bytes = 0, ret; do { if (read_bytes == conv_size) { conv_size += 65535; - converted = realloc(converted, conv_size); + converted = srealloc(converted, conv_size); } ret = read(readpipe[0], converted + read_bytes, conv_size - read_bytes); if (ret == -1) { diff --git a/src/ipc.c b/src/ipc.c index 5fd43c08..a4bc2278 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -900,7 +900,7 @@ static int add_subscription(void *extra, const unsigned char *s, int event = client->num_events; client->num_events++; - client->events = realloc(client->events, client->num_events * sizeof(char *)); + client->events = srealloc(client->events, client->num_events * sizeof(char *)); /* We copy the string because it is not null-terminated and strndup() * is missing on some BSD systems */ client->events[event] = scalloc(len + 1, 1); diff --git a/src/startup.c b/src/startup.c index 1cfec5f7..400d3192 100644 --- a/src/startup.c +++ b/src/startup.c @@ -316,14 +316,8 @@ struct Startup_Sequence *startup_sequence_get(i3Window *cwindow, } char *startup_id; - if (asprintf(&startup_id, "%.*s", xcb_get_property_value_length(startup_id_reply), - (char *)xcb_get_property_value(startup_id_reply)) == -1) { - perror("asprintf()"); - DLOG("Could not get _NET_STARTUP_ID\n"); - free(startup_id_reply); - return NULL; - } - + sasprintf(&startup_id, "%.*s", xcb_get_property_value_length(startup_id_reply), + (char *)xcb_get_property_value(startup_id_reply)); struct Startup_Sequence *current, *sequence = NULL; TAILQ_FOREACH(current, &startup_sequences, sequences) { if (strcmp(current->id, startup_id) != 0) diff --git a/src/util.c b/src/util.c index 7c631b0d..5a95e67c 100644 --- a/src/util.c +++ b/src/util.c @@ -122,7 +122,7 @@ void exec_i3_utility(char *name, char *argv[]) { /* if the script is not in path, maybe the user installed to a strange * location and runs the i3 binary with an absolute path. We use * argv[0]’s dirname */ - char *pathbuf = strdup(start_argv[0]); + char *pathbuf = sstrdup(start_argv[0]); char *dir = dirname(pathbuf); sasprintf(&migratepath, "%s/%s", dir, name); argv[0] = migratepath; diff --git a/src/window.c b/src/window.c index dd04b1b9..764cfca5 100644 --- a/src/window.c +++ b/src/window.c @@ -208,13 +208,8 @@ void window_update_role(i3Window *win, xcb_get_property_reply_t *prop, bool befo } char *new_role; - if (asprintf(&new_role, "%.*s", xcb_get_property_value_length(prop), - (char *)xcb_get_property_value(prop)) == -1) { - perror("asprintf()"); - DLOG("Could not get WM_WINDOW_ROLE\n"); - free(prop); - return; - } + sasprintf(&new_role, "%.*s", xcb_get_property_value_length(prop), + (char *)xcb_get_property_value(prop)); FREE(win->role); win->role = new_role; LOG("WM_WINDOW_ROLE changed to \"%s\"\n", win->role);