summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFurkan Sahin <furkan-dev@proton.me>2017-10-22 19:50:43 -0400
committerFurkan Sahin <furkan-dev@proton.me>2017-10-22 19:50:43 -0400
commit31e3f773e8a286962179b8ee997ee7faca2f2509 (patch)
tree69ad279926d48dc20265cb45c95dfabff5f0fddb
parenta749990c160eadf05a044f67fd512c6dc0a2653c (diff)
parente0e2785c096d7e912c9a77072096d2fedce6d7e8 (diff)
Merge pull request #1424 from ggreer/swaygrab-json
swaygrab: Prevent segfault if IPC response can't be parsed.
-rw-r--r--swaygrab/json.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/swaygrab/json.c b/swaygrab/json.c
index 80dae299..32b68612 100644
--- a/swaygrab/json.c
+++ b/swaygrab/json.c
@@ -4,6 +4,7 @@
#include <stdbool.h>
#include <stdlib.h>
#include <unistd.h>
+#include "log.h"
#include "ipc-client.h"
#include "swaygrab/json.h"
@@ -12,7 +13,15 @@ static json_object *tree;
void init_json_tree(int socketfd) {
uint32_t len = 0;
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() {