From f77e3cbf0ca7a91fc773f631828e95584e3ad146 Mon Sep 17 00:00:00 2001 From: wm4 Date: Tue, 28 Apr 2015 09:58:20 +0200 Subject: 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. --- misc/json.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'misc') 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]) -- cgit v1.2.3