libi3: validate UTF8 strings

Will validate container / window titles.

Fixes #3156.
This commit is contained in:
Orestis Floros
2018-09-09 15:32:54 +03:00
parent a3dcee35f3
commit 6a1f653508
4 changed files with 51 additions and 20 deletions

View File

@ -611,9 +611,16 @@ void tree_append_json(Con *con, const char *buf, const size_t len, char **errorm
yajl_config(hand, yajl_allow_comments, true);
/* Allow multiple values, i.e. multiple nodes to attach */
yajl_config(hand, yajl_allow_multiple_values, true);
/* Allow strings that are not valid UTF8. Could be possible if a container
* name contains such characters. If yajl stops parsing because of this, an
* in-place restart could fail: see #3156. */
/* We don't need to validate that the input is valid UTF8 here.
* tree_append_json is called in two cases:
* 1. With the append_layout command. json_validate is called first and will
* fail on invalid UTF8 characters so we don't need to recheck.
* 2. With an in-place restart. The rest of the codebase should be
* responsible for producing valid UTF8 JSON output. If not,
* tree_append_json will just preserve invalid UTF8 strings in the tree
* instead of failing to parse the layout file which could lead to
* problems like in #3156.
* Either way, disabling UTF8 validation slightly speeds up yajl. */
yajl_config(hand, yajl_dont_validate_strings, true);
json_node = con;
to_focus = NULL;