mirror of
https://github.com/swaywm/sway.git
synced 2024-11-18 22:19:14 +00:00
swaygrab: Increase max depth of JSON parsing to 256. Prevent segfault if IPC response can't be parsed.
The default max nesting depth of json-c is 32, which can cause some valid trees to fail to be parsed, so increase that. Also instead of segfaulting, just abort and print the error returned by json-c.
This commit is contained in:
parent
66d3777c14
commit
98875443ea
|
@ -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() {
|
||||||
|
|
Loading…
Reference in a new issue