diff options
author | Jeff Morriss <jeff.morriss.ws@gmail.com> | 2014-06-25 15:37:36 -0400 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2014-06-27 00:48:51 +0000 |
commit | 9d4af5fccd4061521f72d42c2afb7fef78d3e690 (patch) | |
tree | 792a561669f89d803f7d5dc4e434fd75fa177a0c /epan | |
parent | 4742fc8ed25f64822c711610e847298600319282 (diff) |
Check the validity of fields given to tshark with "-e": complain and exit if
they aren't valid.
Should help avoid confusion like that in
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=10201
Bug: 10201
Change-Id: Iff7f51ae042ca1a92d1c803b6cb61aa5d81ce205
Reviewed-on: https://code.wireshark.org/review/2654
Reviewed-by: Michael Mann <mmann78@netscape.net>
Reviewed-by: Evan Huus <eapache@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/print.c | 26 | ||||
-rw-r--r-- | epan/print.h | 1 |
2 files changed, 27 insertions, 0 deletions
diff --git a/epan/print.c b/epan/print.c index 3789443134..f4eb8818e0 100644 --- a/epan/print.c +++ b/epan/print.c @@ -1429,6 +1429,32 @@ void output_fields_add(output_fields_t *fields, const gchar *field) } +static void +output_field_check(void *data, void *user_data) +{ + gchar *field = (gchar *)data; + gboolean *all_valid = (gboolean *)user_data; + + if (!strncmp(field, COLUMN_FIELD_FILTER, strlen(COLUMN_FIELD_FILTER))) + return; + + if (!proto_registrar_get_byname(field)) { + g_warning("'%s' isn't a valid field!", field); + *all_valid = FALSE; + } + +} + +gboolean +output_fields_valid(output_fields_t *fields) +{ + gboolean all_valid = TRUE; + + g_ptr_array_foreach(fields->fields, output_field_check, &all_valid); + + return all_valid; +} + gboolean output_fields_set_option(output_fields_t *info, gchar *option) { const gchar *option_name; diff --git a/epan/print.h b/epan/print.h index be739f248b..9832d575a4 100644 --- a/epan/print.h +++ b/epan/print.h @@ -119,6 +119,7 @@ typedef struct _output_fields output_fields_t; WS_DLL_PUBLIC output_fields_t* output_fields_new(void); WS_DLL_PUBLIC void output_fields_free(output_fields_t* info); WS_DLL_PUBLIC void output_fields_add(output_fields_t* info, const gchar* field); +WS_DLL_PUBLIC gboolean output_fields_valid(output_fields_t* info); WS_DLL_PUBLIC gsize output_fields_num_fields(output_fields_t* info); WS_DLL_PUBLIC gboolean output_fields_set_option(output_fields_t* info, gchar* option); WS_DLL_PUBLIC void output_fields_list_options(FILE *fh); |