diff options
Diffstat (limited to 'swaybar/ipc.c')
-rw-r--r-- | swaybar/ipc.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/swaybar/ipc.c b/swaybar/ipc.c index 6bbe9408..a64aa1ab 100644 --- a/swaybar/ipc.c +++ b/swaybar/ipc.c | |||
@@ -547,9 +547,23 @@ bool handle_ipc_readable(struct swaybar *bar) { | |||
547 | return false; | 547 | return false; |
548 | } | 548 | } |
549 | 549 | ||
550 | json_object *result = json_tokener_parse(resp->payload); | 550 | // The default depth of 32 is too small to represent some nested layouts, but |
551 | if (!result) { | 551 | // we can't pass INT_MAX here because json-c (as of this writing) prefaults |
552 | sway_log(SWAY_ERROR, "failed to parse payload as json"); | 552 | // all the memory for its stack. |
553 | json_tokener *tok = json_tokener_new_ex(256); | ||
554 | if (!tok) { | ||
555 | sway_log_errno(SWAY_ERROR, "failed to create tokener"); | ||
556 | free_ipc_response(resp); | ||
557 | return false; | ||
558 | } | ||
559 | |||
560 | json_object *result = json_tokener_parse_ex(tok, resp->payload, -1); | ||
561 | enum json_tokener_error err = json_tokener_get_error(tok); | ||
562 | json_tokener_free(tok); | ||
563 | |||
564 | if (err != json_tokener_success) { | ||
565 | sway_log(SWAY_ERROR, "failed to parse payload as json: %s", | ||
566 | json_tokener_error_desc(err)); | ||
553 | free_ipc_response(resp); | 567 | free_ipc_response(resp); |
554 | return false; | 568 | return false; |
555 | } | 569 | } |