qemu-e2k/tests
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
..
qemu-iotests qcow2: Gather clusters in a looping loop 2013-03-28 11:52:44 +01:00
tcg tests: tcg: lm32: add more test cases 2013-03-18 19:40:34 +01:00
.gitignore Add some missing qtest binaries to .gitignore 2013-02-21 10:33:54 +01:00
check-block.sh
check-qdict.c
check-qfloat.c
check-qint.c
check-qjson.c qjson: to_json() case QTYPE_QSTRING is buggy, rewrite 2013-04-13 19:40:25 +00:00
check-qlist.c
check-qstring.c
fdc-test.c
hd-geo-test.c
libi2c-omap.c qtest: Add MMIO support 2013-02-18 08:39:10 -06:00
libi2c.c
libi2c.h
libqtest.c qtest: Add MMIO support 2013-02-18 08:39:10 -06:00
libqtest.h qtest: Add MMIO support 2013-02-18 08:39:10 -06:00
m48t59-test.c qtest: Add MMIO support 2013-02-18 08:39:10 -06:00
Makefile configure: Don't fall back to gthread coroutine backend 2013-04-08 10:38:44 -05:00
qemu-iotests-quick.sh
rtc-test.c hw: move headers to include/ 2013-04-08 18:13:10 +02:00
test-aio.c
test-coroutine.c coroutine: trim down nesting level in perf_nesting test 2013-02-22 21:21:10 +01:00
test-cutils.c cutils: unsigned int parsing functions 2013-02-04 14:38:33 -06:00
test-hbitmap.c hbitmap: add assertion on hbitmap_iter_init 2013-01-25 18:18:35 +01:00
test-iov.c
test-mul64.c tests: Add unit tests for mulu64 and muls64 2013-02-17 14:28:58 +00:00
test-qmp-commands.c
test-qmp-input-strict.c
test-qmp-input-visitor.c
test-qmp-output-visitor.c
test-string-input-visitor.c tests/test-string-input-visitor: Handle errors provoked by fuzz test 2013-02-07 13:22:50 -02:00
test-string-output-visitor.c
test-thread-pool.c threadpool: drop global thread pool 2013-03-15 16:07:51 +01:00
test-visitor-serialization.c test-visitor-serialization: Fix some memory leaks 2013-04-05 14:38:45 +02:00
test-x86-cpuid.c target-i386: Topology & APIC ID utility functions 2013-01-27 14:34:27 +01:00
test-xbzrle.c Add XBZRLE testing 2013-02-01 08:32:20 +01:00
tmp105-test.c hw: move headers to include/ 2013-04-08 18:13:10 +02:00