diff --git a/src/assignments.c b/src/assignments.c index f171dc3b..50f48526 100644 --- a/src/assignments.c +++ b/src/assignments.c @@ -39,7 +39,9 @@ void run_assignments(i3Window *window) { DLOG("execute command %s\n", current->dest.command); char *full_command; asprintf(&full_command, "[id=\"%d\"] %s", window->id, current->dest.command); - parse_cmd(full_command); + char *json_result = parse_cmd(full_command); + FREE(full_command); + FREE(json_result); } /* Store that we ran this assignment to not execute it again */ diff --git a/src/cfgparse.y b/src/cfgparse.y index 59b22c6c..abbe4da0 100644 --- a/src/cfgparse.y +++ b/src/cfgparse.y @@ -1101,6 +1101,7 @@ colorpixel: char *hex; if (asprintf(&hex, "#%s", $2) == -1) die("asprintf()"); + free($2); $$ = get_colorpixel(hex); free(hex); } diff --git a/src/cmdparse.y b/src/cmdparse.y index 32558f2e..9b63ff0c 100644 --- a/src/cmdparse.y +++ b/src/cmdparse.y @@ -81,13 +81,13 @@ int cmdyywrap() { } char *parse_cmd(const char *new) { + json_output = NULL; LOG("COMMAND: *%s*\n", new); cmdyy_scan_string(new); match_init(¤t_match); context = scalloc(sizeof(struct context)); context->filename = "cmd"; - FREE(json_output); if (cmdyyparse() != 0) { fprintf(stderr, "Could not parse command\n"); asprintf(&json_output, "{\"success\":false, \"error\":\"%s at position %d\"}", diff --git a/src/config.c b/src/config.c index 24af35df..14fc6e02 100644 --- a/src/config.c +++ b/src/config.c @@ -193,6 +193,7 @@ static char *get_config_path(const char *override_configpath) { config_path = resolve_tilde("~/.i3/config"); if (path_exists(config_path)) return config_path; + free(config_path); /* 2: check for $XDG_CONFIG_HOME/i3/config */ if ((xdg_config_home = getenv("XDG_CONFIG_HOME")) == NULL) diff --git a/src/handlers.c b/src/handlers.c index 89a6bd0a..f19b53c8 100644 --- a/src/handlers.c +++ b/src/handlers.c @@ -112,7 +112,8 @@ static int handle_key_press(xcb_key_press_event_t *event) { } } - parse_cmd(bind->command); + char *json_result = parse_cmd(bind->command); + FREE(json_result); return 1; } diff --git a/src/ipc.c b/src/ipc.c index b2cd482c..d798ffa0 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -147,7 +147,8 @@ IPC_HANDLER(command) { char *command = scalloc(message_size + 1); strncpy(command, (const char*)message, message_size); LOG("IPC: received: *%s*\n", command); - const char *reply = parse_cmd((const char*)command); + char *reply = parse_cmd((const char*)command); + char *save_reply = reply; free(command); /* If no reply was provided, we just use the default success message */ @@ -155,6 +156,8 @@ IPC_HANDLER(command) { reply = "{\"success\":true}"; ipc_send_message(fd, (const unsigned char*)reply, I3_IPC_REPLY_TYPE_COMMAND, strlen(reply)); + + FREE(save_reply); } static void dump_rect(yajl_gen gen, const char *name, Rect r) {