aboutsummaryrefslogtreecommitdiffstats
path: root/sharkd_session.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2018-09-26 13:02:25 +0200
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2018-09-26 12:41:39 +0000
commit39791a55a8c39aba67d950b3a369f465a7ec7fa0 (patch)
tree201ab29a3332e4b2f280ce1e0817da67a4e5197e /sharkd_session.c
parent0b9abc10012c5653c4f1d0d36b54bd250273554b (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.c30
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];