aboutsummaryrefslogtreecommitdiffstats
path: root/sharkd_session.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2017-09-02 21:47:14 +0200
committerJakub Zawadzki <darkjames-ws@darkjames.pl>2017-09-08 18:14:59 +0000
commit1c6f6c691f52bc3c0a660e6f82453844135acb30 (patch)
tree64b06491a0bd51fe2c811e6b32c6e08f3d13ad1a /sharkd_session.c
parent585297b189ba7f39db34f66f57d25429c8daf570 (diff)
sharkd: implement proper JSON string unescaping, based on JSON dissector.
Change-Id: I749b78b759f98c78526840b8bb1cbccfc17a5611 Reviewed-on: https://code.wireshark.org/review/23365 Petri-Dish: Jakub Zawadzki <darkjames-ws@darkjames.pl> Tested-by: Jakub Zawadzki <darkjames-ws@darkjames.pl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Dario Lombardo <lomato@gmail.com> Reviewed-by: Jakub Zawadzki <darkjames-ws@darkjames.pl>
Diffstat (limited to 'sharkd_session.c')
-rw-r--r--sharkd_session.c28
1 files changed, 8 insertions, 20 deletions
diff --git a/sharkd_session.c b/sharkd_session.c
index 431e01e9f6..299c711572 100644
--- a/sharkd_session.c
+++ b/sharkd_session.c
@@ -81,26 +81,10 @@
#include "sharkd.h"
-static void
+static gboolean
json_unescape_str(char *input)
{
- char *output = input;
-
- while (*input)
- {
- char ch = *input++;
-
- if (ch == '\\')
- {
- /* TODO, add more escaping rules */
- ch = *input++;
- }
-
- *output = ch;
- output++;
- }
-
- *output = '\0';
+ return wsjsmn_unescape_json_string(input, input);
}
static const char *
@@ -3646,8 +3630,12 @@ sharkd_session_process(char *buf, const jsmntok_t *tokens, int count)
buf[tokens[i + 0].end] = '\0';
buf[tokens[i + 1].end] = '\0';
- json_unescape_str(&buf[tokens[i + 0].start]);
- json_unescape_str(&buf[tokens[i + 1].start]);
+ /* unescape only value, as keys are simple strings */
+ if (!json_unescape_str(&buf[tokens[i + 1].start]))
+ {
+ fprintf(stderr, "sanity check(3a): [%d] cannot unescape string\n", i + 1);
+ return;
+ }
}
{