diff options
author | Jakub Zawadzki <darkjames-ws@darkjames.pl> | 2018-09-01 18:47:38 +0200 |
---|---|---|
committer | Michal Labedzki <michal.labedzki@wireshark.org> | 2018-09-02 11:23:30 +0000 |
commit | 3ce847e39e4b5a51f4163459e6206b62049f8930 (patch) | |
tree | d85815032cc76e8542a31443f5b0d22a24ae55bb /sharkd_session.c | |
parent | 8f99b54a77c8747b310ebbc00cdbb51d4035cb99 (diff) |
sharkd: Fix frames request for empty "" filter
For empty filters dfilter_compile() return success but with NULL dfcode,
still if used dfilter_prime_proto_tree() crashed cause of NULL df pointer.
Change-Id: I0684abf8ef766a24d0c8150fef4e113813c490ea
Reviewed-on: https://code.wireshark.org/review/29390
Petri-Dish: Jakub Zawadzki <darkjames-ws@darkjames.pl>
Tested-by: Petri Dish Buildbot
Reviewed-by: Michal Labedzki <michal.labedzki@wireshark.org>
Tested-by: Michal Labedzki <michal.labedzki@wireshark.org>
Diffstat (limited to 'sharkd_session.c')
-rw-r--r-- | sharkd_session.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/sharkd_session.c b/sharkd_session.c index 5c3bfb74bc..04948f8f23 100644 --- a/sharkd_session.c +++ b/sharkd_session.c @@ -73,7 +73,7 @@ struct sharkd_filter_item { - guint8 *filtered; + guint8 *filtered; /* can be NULL if all frames are matching for given filter. */ }; static GHashTable *filter_table = NULL; @@ -178,7 +178,7 @@ sharkd_session_filter_free(gpointer data) g_free(l); } -static const guint8 * +static const struct sharkd_filter_item * sharkd_session_filter_data(const char *filter) { struct sharkd_filter_item *l; @@ -199,7 +199,7 @@ sharkd_session_filter_data(const char *filter) g_hash_table_insert(filter_table, g_strdup(filter), l); } - return l->filtered; + return l; } static gboolean @@ -810,9 +810,12 @@ sharkd_session_process_frames(const char *buf, const jsmntok_t *tokens, int coun if (tok_filter) { - filter_data = sharkd_session_filter_data(tok_filter); - if (!filter_data) + const struct sharkd_filter_item *filter_item; + + filter_item = sharkd_session_filter_data(tok_filter); + if (!filter_item) return; + filter_data = filter_item->filtered; } skip = 0; @@ -3160,9 +3163,12 @@ sharkd_session_process_intervals(char *buf, const jsmntok_t *tokens, int count) if (tok_filter) { - filter_data = sharkd_session_filter_data(tok_filter); - if (!filter_data) + const struct sharkd_filter_item *filter_item; + + filter_item = sharkd_session_filter_data(tok_filter); + if (!filter_item) return; + filter_data = filter_item->filtered; } st_total.frames = 0; |