diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2017-09-02 21:47:14 +0200 |
---|---|---|
committer | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2017-09-08 18:14:59 +0000 |
commit | 1c6f6c691f52bc3c0a660e6f82453844135acb30 (patch) | |
tree | 64b06491a0bd51fe2c811e6b32c6e08f3d13ad1a /sharkd_session.c | |
parent | 585297b189ba7f39db34f66f57d25429c8daf570 (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.c | 28 |
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; + } } { |