aboutsummaryrefslogtreecommitdiffstats
path: root/sharkd_session.c
diff options
context:
space:
mode:
authorJakub Zawadzki <darkjames-ws@darkjames.pl>2018-09-01 18:47:38 +0200
committerMichal Labedzki <michal.labedzki@wireshark.org>2018-09-02 11:23:30 +0000
commit3ce847e39e4b5a51f4163459e6206b62049f8930 (patch)
treed85815032cc76e8542a31443f5b0d22a24ae55bb /sharkd_session.c
parent8f99b54a77c8747b310ebbc00cdbb51d4035cb99 (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.c20
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;