summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--epan/column-utils.c13
-rw-r--r--epan/column.c7
-rw-r--r--epan/column_info.h4
-rw-r--r--epan/proto.c3
-rw-r--r--tshark.c7
5 files changed, 25 insertions, 9 deletions
diff --git a/epan/column-utils.c b/epan/column-utils.c
index 728489197f..477b81fd6d 100644
--- a/epan/column-utils.c
+++ b/epan/column-utils.c
@@ -61,6 +61,7 @@ col_setup(column_info *cinfo, gint num_cols)
cinfo->col_last = g_new(int, NUM_COL_FMTS);
cinfo->col_title = g_new(gchar*, num_cols);
cinfo->col_custom_field = g_new(gchar*, num_cols);
+ cinfo->col_custom_dfilter = g_new(dfilter_t*, num_cols);
cinfo->col_data = (const gchar **)g_new(gchar*, num_cols);
cinfo->col_buf = g_new(gchar*, num_cols);
cinfo->col_fence = g_new(int, num_cols);
@@ -287,7 +288,8 @@ col_custom_set_fstr(header_field_info *hfinfo, const gchar *format, ...)
for (i = ci->col_first[COL_CUSTOM];
i <= ci->col_last[COL_CUSTOM]; i++) {
if (ci->fmt_matx[i][COL_CUSTOM] &&
- strcmp(ci->col_custom_field[i], hfinfo->abbrev) == 0) {
+ ci->col_custom_field[i] &&
+ strcmp(ci->col_custom_field[i], hfinfo->abbrev) == 0) {
ci->col_data[i] = ci->col_buf[i];
g_vsnprintf(ci->col_buf[i], COL_MAX_LEN, format, ap);
@@ -313,7 +315,6 @@ void
col_custom_prime_edt(epan_dissect_t *edt, column_info *cinfo)
{
int i;
- dfilter_t *dfilter_code;
ci = cinfo; /* Save this into the static variable ci for use by
* col_custom_set_fstr() later. */
@@ -324,12 +325,8 @@ col_custom_prime_edt(epan_dissect_t *edt, column_info *cinfo)
for (i = cinfo->col_first[COL_CUSTOM];
i <= cinfo->col_last[COL_CUSTOM]; i++) {
if (cinfo->fmt_matx[i][COL_CUSTOM] &&
- strlen(cinfo->col_custom_field[i]) > 0) {
- if(dfilter_compile(cinfo->col_custom_field[i], &dfilter_code)) {
- epan_dissect_prime_dfilter(edt, dfilter_code);
- dfilter_free(dfilter_code);
- }
- }
+ cinfo->col_custom_dfilter[i])
+ epan_dissect_prime_dfilter(edt, cinfo->col_custom_dfilter[i]);
}
}
diff --git a/epan/column.c b/epan/column.c
index 93ddd86edf..30812f3268 100644
--- a/epan/column.c
+++ b/epan/column.c
@@ -668,8 +668,15 @@ build_column_format_array(column_info *cinfo, gboolean reset_fences)
cinfo->col_title[i] = g_strdup(get_column_title(i));
if (cinfo->col_fmt[i] == COL_CUSTOM) {
cinfo->col_custom_field[i] = g_strdup(get_column_custom_field(i));
+ if(!dfilter_compile(cinfo->col_custom_field[i], &cinfo->col_custom_dfilter[i])) {
+ /* XXX: Should we issue a warning? */
+ g_free(cinfo->col_custom_field[i]);
+ cinfo->col_custom_field[i] = NULL;
+ cinfo->col_custom_dfilter[i] = NULL;
+ }
} else {
cinfo->col_custom_field[i] = NULL;
+ cinfo->col_custom_dfilter[i] = NULL;
}
cinfo->fmt_matx[i] = (gboolean *) g_malloc0(sizeof(gboolean) *
NUM_COL_FMTS);
diff --git a/epan/column_info.h b/epan/column_info.h
index 6e0d243632..9bae5055ca 100644
--- a/epan/column_info.h
+++ b/epan/column_info.h
@@ -27,6 +27,9 @@
#include <glib.h>
+/* Forward declaration (epan/dfilter/dfilter.h) */
+typedef struct _dfilter_t dfilter_t;
+
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
@@ -47,6 +50,7 @@ typedef struct _column_info {
gint *col_last; /* Last column number with a given format */
gchar **col_title; /* Column titles */
gchar **col_custom_field; /* Custom column field */
+ dfilter_t **col_custom_dfilter; /* Compiled custom column field */
const gchar **col_data; /* Column data */
gchar **col_buf; /* Buffer into which to copy data for column */
int *col_fence; /* Stuff in column buffer before this index is immutable */
diff --git a/epan/proto.c b/epan/proto.c
index e984c15564..485b515b1c 100644
--- a/epan/proto.c
+++ b/epan/proto.c
@@ -729,7 +729,8 @@ proto_registrar_get_byname(const char *field_name)
header_field_info* hfinfo;
prefix_initializer_t pi;
- DISSECTOR_ASSERT(field_name != NULL);
+ if (!field_name)
+ return NULL;
hfinfo = g_tree_lookup(gpa_name_tree, field_name);
diff --git a/tshark.c b/tshark.c
index 52aa40f054..10bdf3518a 100644
--- a/tshark.c
+++ b/tshark.c
@@ -1420,8 +1420,15 @@ main(int argc, char *argv[])
cfile.cinfo.col_title[i] = g_strdup(get_column_title(i));
if (cfile.cinfo.col_fmt[i] == COL_CUSTOM) {
cfile.cinfo.col_custom_field[i] = g_strdup(get_column_custom_field(i));
+ if(!dfilter_compile(cfile.cinfo.col_custom_field[i], &cfile.cinfo.col_custom_dfilter[i])) {
+ /* XXX: Should we issue a warning? */
+ g_free(cfile.cinfo.col_custom_field[i]);
+ cfile.cinfo.col_custom_field[i] = NULL;
+ cfile.cinfo.col_custom_dfilter[i] = NULL;
+ }
} else {
cfile.cinfo.col_custom_field[i] = NULL;
+ cfile.cinfo.col_custom_dfilter[i] = NULL;
}
cfile.cinfo.fmt_matx[i] = (gboolean *) g_malloc0(sizeof(gboolean) *
NUM_COL_FMTS);