json: escape u0000 .. u001F when outputting json
Markus Armbruster pointed out: JSON requires control characters in strings to be escaped. RFC 4627 section 2.5: A string begins and ends with quotation marks. All Unicode characters may be placed within the quotation marks except for the characters that must be escaped: quotation mark, reverse solidus, and the control characters (U+0000 through U+001F). We've been quoting the special escape sequences that JSON defines but we haven't been encoding the full control character range. This patch fixes that. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
6908d9ce4c
commit
ff06ea2197
6
qjson.c
6
qjson.c
@ -163,8 +163,14 @@ static void to_json(const QObject *obj, QString *str)
|
|||||||
qstring_append(str, "\\t");
|
qstring_append(str, "\\t");
|
||||||
break;
|
break;
|
||||||
default: {
|
default: {
|
||||||
|
if (ptr[0] <= 0x1F) {
|
||||||
|
char escape[7];
|
||||||
|
snprintf(escape, sizeof(escape), "\\u%04X", ptr[0]);
|
||||||
|
qstring_append(str, escape);
|
||||||
|
} else {
|
||||||
char buf[2] = { ptr[0], 0 };
|
char buf[2] = { ptr[0], 0 };
|
||||||
qstring_append(str, buf);
|
qstring_append(str, buf);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user