summaryrefslogtreecommitdiffstats
path: root/misc
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-04-28 09:58:20 +0200
committerwm4 <wm4@nowhere>2015-04-28 09:58:28 +0200
commitf77e3cbf0ca7a91fc773f631828e95584e3ad146 (patch)
tree939bb2025143b0da2dbe8f198b3fd426847fc2c2 /misc
parent43b6b376dc1366c5c0c7f95e3fc3cc249a62a214 (diff)
downloadmpv-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')
-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])