From 39791a55a8c39aba67d950b3a369f465a7ec7fa0 Mon Sep 17 00:00:00 2001 From: Jakub Zawadzki Date: Wed, 26 Sep 2018 13:02:25 +0200 Subject: 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 Tested-by: Petri Dish Buildbot Reviewed-by: Jakub Zawadzki --- sharkd_session.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'sharkd_session.c') 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]; -- cgit v1.2.3