diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2018-09-26 13:02:25 +0200 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2018-09-26 12:41:39 +0000 |
commit | 39791a55a8c39aba67d950b3a369f465a7ec7fa0 (patch) | |
tree | 201ab29a3332e4b2f280ce1e0817da67a4e5197e /sharkd_session.c | |
parent | 0b9abc10012c5653c4f1d0d36b54bd250273554b (diff) |
sharkd: fix JSON generation
Fix JSON generation:
- add lookup table to encode all required control characters (0x00 - 0x1F),
- don't output comma just after opening object in iograph.
Change-Id: Ib53af9c37f4d7785cafc5f9a8d0e71b214c7f349
Reviewed-on: https://code.wireshark.org/review/29852
Petri-Dish: Jakub Zawadzki <darkjames-ws@darkjames.pl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Jakub Zawadzki <darkjames-ws@darkjames.pl>
Diffstat (limited to 'sharkd_session.c')
-rw-r--r-- | sharkd_session.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/sharkd_session.c b/sharkd_session.c index 65475ec7f6..f3937f77e8 100644 --- a/sharkd_session.c +++ b/sharkd_session.c @@ -105,6 +105,12 @@ json_find_attr(const char *buf, const jsmntok_t *tokens, int count, const char * static void json_puts_string(const char *str) { + static const char json_cntrl[0x20][6] = + { + "u0000", "u0001", "u0002", "u0003", "u0004", "u0005", "u0006", "u0007", "b", "t", "n", "u000b", "f", "r", "u000e", "u000f", + "u0010", "u0011", "u0012", "u0013", "u0014", "u0015", "u0016", "u0017", "u0018", "u0019", "u001a", "u001b", "u001c", "u001d", "u001e", "u001f" + }; + int i; if (str == NULL) @@ -113,22 +119,16 @@ json_puts_string(const char *str) putchar('"'); for (i = 0; str[i]; i++) { - switch (str[i]) + if (((unsigned char) str[i]) < 0x20) { - case '\\': - case '"': - putchar('\\'); - putchar(str[i]); - break; - - case '\n': + putchar('\\'); + fputs(json_cntrl[str[i]], stdout); + } + else + { + if (str[i] == '\\' || str[i] == '"') putchar('\\'); - putchar('n'); - break; - - default: - putchar(str[i]); - break; + putchar(str[i]); } } @@ -3198,7 +3198,7 @@ sharkd_session_process_iograph(char *buf, const jsmntok_t *tokens, int count) sharkd_json_object_open(FALSE); - sharkd_json_array_open(TRUE, "iograph"); + sharkd_json_array_open(FALSE, "iograph"); for (i = 0; i < graph_count; i++) { struct sharkd_iograph *graph = &graphs[i]; |