diff options
-rw-r--r-- | epan/column-utils.c | 13 | ||||
-rw-r--r-- | epan/column.c | 7 | ||||
-rw-r--r-- | epan/column_info.h | 4 | ||||
-rw-r--r-- | epan/proto.c | 3 | ||||
-rw-r--r-- | tshark.c | 7 |
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); @@ -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); |