summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-04-28 09:58:20 +0200
committerDiogo Franco (Kovensky) <diogomfranco@gmail.com>2015-04-29 18:38:34 +0900
commit0a55f43181da25eb802bef9ad83741a80eeef204 (patch)
tree62c53728822e04c62619fc5adf94dfa3f71b0ac3
parent5aa2d496e61cb7f2ba33c728765ed3a55eef1be0 (diff)
downloadmpv-0a55f43181da25eb802bef9ad83741a80eeef204.tar.bz2
mpv-0a55f43181da25eb802bef9ad83741a80eeef204.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. (cherry picked from commit f77e3cbf0ca7a91fc773f631828e95584e3ad146)
-rw-r--r--misc/json.c4
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])