Markus Armbruster e2ec3f9768 qjson: to_json() case QTYPE_QSTRING is buggy, rewrite
Known bugs in to_json():

* A start byte for a three-byte sequence followed by less than two
  continuation bytes is split into one-byte sequences.

* Start bytes for sequences longer than three bytes get misinterpreted
  as start bytes for three-byte sequences.  Continuation bytes beyond
  byte three become one-byte sequences.

  This means all characters outside the BMP are decoded incorrectly.

* One-byte sequences with the MSB are put into the JSON string
  verbatim when char is unsigned, producing invalid UTF-8.  When char
  is signed, they're replaced by "\\uFFFF" instead.

  This includes \xFE, \xFF, and stray continuation bytes.

* Overlong sequences are happily accepted, unless screwed up by the
  bugs above.

* Likewise, sequences encoding surrogate code points or noncharacters.

* Unlike other control characters, ASCII DEL is not escaped.  Except
  in overlong encodings.

My rewrite fixes them as follows:

* Malformed UTF-8 sequences are replaced.

  Except the overlong encoding \xC0\x80 of U+0000 is still accepted.
  Permits embedding NUL characters in C strings.  This trick is known
  as "Modified UTF-8".

* Sequences encoding code points beyond Unicode range are replaced.

* Sequences encoding code points beyond the BMP produce a surrogate
  pair.

* Sequences encoding surrogate code points are replaced.

* Sequences encoding noncharacters are replaced.

* ASCII DEL is now always escaped.

The replacement character is U+FFFD.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
2013-04-13 19:40:25 +00:00
2013-04-12 14:33:20 +02:00
2013-04-13 19:39:59 +00:00
2012-12-19 08:29:06 +01:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-04-04 00:28:37 +02:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-04-13 19:39:59 +00:00
2012-09-07 09:02:44 +03:00
2012-11-01 13:10:06 +01:00
2013-02-21 16:17:31 -06:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2012-05-14 07:27:24 +02:00
2013-03-23 14:25:41 +00:00
2013-02-16 14:50:59 +01:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-02-21 16:17:31 -06:00
2013-04-08 18:13:10 +02:00
2013-03-11 13:32:03 +01:00
2013-02-22 21:21:10 +01:00
2013-02-22 21:29:43 +01:00
2013-02-15 17:40:56 -06:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00
2013-04-08 18:13:10 +02:00

Read the documentation in qemu-doc.html or on http://wiki.qemu.org

- QEMU team
S
Description
No description provided
Readme 599 MiB
Languages
C 83.1%
C++ 6.4%
Python 3.3%
Dylan 2.8%
Shell 1.5%
Other 2.6%