Commit ff06ea21 authored by Anthony Liguori's avatar Anthony Liguori
Browse files

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: default avatarAnthony Liguori <aliguori@us.ibm.com>
parent 6908d9ce
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -163,8 +163,14 @@ static void to_json(const QObject *obj, QString *str)
                    qstring_append(str, "\\t");
                    break;
                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 };
                        qstring_append(str, buf);
                    }
                    break;
                }
                }