diff options
author | wm4 <wm4@nowhere> | 2015-04-28 09:58:20 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-04-28 09:58:28 +0200 |
commit | f77e3cbf0ca7a91fc773f631828e95584e3ad146 (patch) | |
tree | 939bb2025143b0da2dbe8f198b3fd426847fc2c2 /misc/json.c | |
parent | 43b6b376dc1366c5c0c7f95e3fc3cc249a62a214 (diff) | |
download | mpv-f77e3cbf0ca7a91fc773f631828e95584e3ad146.tar.bz2 mpv-f77e3cbf0ca7a91fc773f631828e95584e3ad146.tar.xz |
json: fix UTF-8 handling
We escape only characters below 32, plus " and \. UTF-8 should be apssed
through verbatim. Since char can be signed (and usually is), the check
broke and happened to escape UTF-8 encoded bytes too. This broke UTF-8
completely.
Note that we don't check for broken or invalid UTF-8, such as described
both in the client API and IPC docs.
Fixes #1874.
Diffstat (limited to 'misc/json.c')
-rw-r--r-- | misc/json.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/misc/json.c b/misc/json.c index 8252511408..b0be7462df 100644 --- a/misc/json.c +++ b/misc/json.c @@ -218,11 +218,11 @@ int json_parse(void *ta_parent, struct mpv_node *dst, char **src, int max_depth) #define APPEND(b, s) bstr_xappend(NULL, (b), bstr0(s)) -static void write_json_str(bstr *b, char *str) +static void write_json_str(bstr *b, unsigned char *str) { APPEND(b, "\""); while (1) { - char *cur = str; + unsigned char *cur = str; while (cur[0] && cur[0] >= 32 && cur[0] != '"' && cur[0] != '\\') cur++; if (!cur[0]) |