Merge pull request #1424 from ggreer/swaygrab-json

swaygrab: Prevent segfault if IPC response can't be parsed.
This commit is contained in:
Drew DeVault 2017-10-22 19:50:43 -04:00
parent 0f7e84c110
commit 6383c4d91c

View file

@ -4,6 +4,7 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h> #include <unistd.h>
#include "log.h"
#include "ipc-client.h" #include "ipc-client.h"
#include "swaygrab/json.h" #include "swaygrab/json.h"
@ -12,7 +13,15 @@ static json_object *tree;
void init_json_tree(int socketfd) { void init_json_tree(int socketfd) {
uint32_t len = 0; uint32_t len = 0;
char *res = ipc_single_command(socketfd, IPC_GET_TREE, NULL, &len); char *res = ipc_single_command(socketfd, IPC_GET_TREE, NULL, &len);
tree = json_tokener_parse(res); struct json_tokener *tok = json_tokener_new_ex(256);
if (!tok) {
sway_abort("Unable to get json tokener.");
}
tree = json_tokener_parse_ex(tok, res, len);
if (!tree || tok->err != json_tokener_success) {
sway_abort("Unable to parse IPC response as JSON: %s", json_tokener_error_desc(tok->err));
}
json_tokener_free(tok);
} }
void free_json_tree() { void free_json_tree() {