From 81a8777b9f4929a869f81a4039a2302b3bf2a107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Valverde?= Date: Sat, 15 Apr 2023 00:18:53 +0100 Subject: dfilter: Make error a pointer Make it easier and more natural to test for errors and hand-over error results. --- dftest.c | 10 +-- epan/color_filters.c | 8 +-- epan/dfilter/dfilter-int.h | 11 +-- epan/dfilter/dfilter-macro.c | 28 ++++---- epan/dfilter/dfilter-macro.h | 4 +- epan/dfilter/dfilter.c | 119 +++++++++++++++++---------------- epan/dfilter/dfilter.h | 67 +++++++++++-------- epan/dfilter/semcheck.c | 13 ++-- epan/dissectors/packet-ncp2222.inc | 2 +- epan/tap.c | 4 +- epan/wslua/wslua_field.c | 2 +- file.c | 2 +- packaging/debian/libwireshark0.symbols | 1 - rawshark.c | 2 +- sharkd_session.c | 4 +- tfshark.c | 4 +- tshark.c | 9 ++- ui/logray/logray_main.cpp | 2 +- ui/logray/logray_main_window.cpp | 2 +- ui/logray/logray_main_window_slots.cpp | 2 +- ui/qt/coloring_rules_dialog.cpp | 2 +- ui/qt/iax2_analysis_dialog.cpp | 2 +- ui/qt/io_graph_dialog.cpp | 2 +- ui/qt/main.cpp | 2 +- ui/qt/widgets/display_filter_edit.cpp | 2 +- ui/qt/widgets/syntax_line_edit.cpp | 2 +- ui/qt/wireshark_main_window.cpp | 4 +- ui/qt/wireshark_main_window_slots.cpp | 2 +- ui/tap-tcp-stream.c | 2 +- 29 files changed, 158 insertions(+), 158 deletions(-) diff --git a/dftest.c b/dftest.c index f60f891973..2b12a77fab 100644 --- a/dftest.c +++ b/dftest.c @@ -165,15 +165,15 @@ static char * expand_filter(const char *text, GTimer *timer) { char *expanded = NULL; - char *err_msg = NULL; + df_error_t *err = NULL; g_timer_start(timer); - expanded = dfilter_expand(text, &err_msg); + expanded = dfilter_expand(text, &err); g_timer_stop(timer); elapsed_expand = g_timer_elapsed(timer, NULL); if (expanded == NULL) { - fprintf(stderr, "Error: %s\n", err_msg); - g_free(err_msg); + fprintf(stderr, "Error: %s\n", err->msg); + df_error_free(&err); } return expanded; } @@ -205,7 +205,7 @@ compile_filter(const char *text, dfilter_t **dfp, GTimer *timer) fprintf(stderr, " %s\n ", text); putloc(stderr, df_err->loc); } - dfilter_error_free(df_err); + df_error_free(&df_err); } return ok; } diff --git a/epan/color_filters.c b/epan/color_filters.c index a1623c1333..5f6eab3a3f 100644 --- a/epan/color_filters.c +++ b/epan/color_filters.c @@ -182,7 +182,7 @@ color_filters_set_tmp(guint8 filt_nr, const gchar *filter, gboolean disabled, gc tmpfilter = ( (filter==NULL) || (i!=filt_nr) ) ? "frame" : filter; if (!dfilter_compile(tmpfilter, &compiled_filter, &df_err)) { *err_msg = ws_strdup_printf( "Could not compile color filter name: \"%s\" text: \"%s\".\n%s", name, filter, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); g_free(name); return FALSE; } else { @@ -416,7 +416,7 @@ color_filter_compile_cb(gpointer filter_arg, gpointer err) if (!dfilter_compile(colorf->filter_text, &colorf->c_colorfilter, &df_err)) { *err_msg = ws_strdup_printf("Could not compile color filter name: \"%s\" text: \"%s\".\n%s", colorf->filter_name, colorf->filter_text, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); /* this filter was compilable before, so this should never happen */ /* except if the OK button of the parent window has been clicked */ /* so don't use ws_assert_not_reached() but check the filters again */ @@ -438,7 +438,7 @@ color_filter_validate_cb(gpointer filter_arg, gpointer err) if (!dfilter_compile(colorf->filter_text, &colorf->c_colorfilter, &df_err)) { *err_msg = ws_strdup_printf("Disabling color filter name: \"%s\" filter: \"%s\".\n%s", colorf->filter_name, colorf->filter_text, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); /* Disable the color filter in the list of color filters. */ colorf->disabled = TRUE; @@ -704,7 +704,7 @@ read_filters_file(const gchar *path, FILE *f, gpointer user_data, color_filter_a if (!disabled && !dfilter_compile(filter_exp, &temp_dfilter, &df_err)) { report_warning("Disabling color filter: Could not compile \"%s\" in colorfilters file \"%s\".\n%s", name, path, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); /* skip_end_of_line = TRUE; */ disabled = TRUE; diff --git a/epan/dfilter/dfilter-int.h b/epan/dfilter/dfilter-int.h index 93af43d0e0..47a3952485 100644 --- a/epan/dfilter/dfilter-int.h +++ b/epan/dfilter/dfilter-int.h @@ -46,7 +46,7 @@ typedef struct { stnode_t *st_root; gboolean parse_failure; unsigned field_count; - df_error_t error; + df_error_t *error; GPtrArray *insns; GHashTable *loaded_fields; GHashTable *loaded_raw_fields; @@ -137,13 +137,4 @@ reference_new(const field_info *finfo, gboolean raw); void reference_free(df_reference_t *ref); -void dfw_error_init(df_error_t *err); - -void dfw_error_clear(df_error_t *err); - -void dfw_error_set_msg(df_error_t **errp, const char *fmt, ...) -G_GNUC_PRINTF(2, 3); - -void dfw_error_take(df_error_t **errp, df_error_t *src); - #endif diff --git a/epan/dfilter/dfilter-macro.c b/epan/dfilter/dfilter-macro.c index 06e11e2d1d..8d9a78fcef 100644 --- a/epan/dfilter/dfilter-macro.c +++ b/epan/dfilter/dfilter-macro.c @@ -10,6 +10,7 @@ #include "config.h" #define WS_LOG_DOMAIN LOG_DOMAIN_DFILTER +#include "dfilter-macro.h" #ifdef DUMP_DFILTER_MACRO #include @@ -17,8 +18,6 @@ #include #include "dfilter-int.h" -#include "dfilter.h" -#include "dfilter-macro.h" #include #include #include @@ -37,7 +36,7 @@ void dump_dfilter_macro_t(const dfilter_macro_t *m, const char *function, const #define DUMP_MACRO(m) #endif -static gchar* dfilter_macro_resolve(gchar* name, gchar** args, gchar** error) { +static gchar* dfilter_macro_resolve(gchar* name, gchar** args, df_error_t** error) { GString* text; int argc = 0; dfilter_macro_t* m = NULL; @@ -56,7 +55,7 @@ static gchar* dfilter_macro_resolve(gchar* name, gchar** args, gchar** error) { if (!m) { if (error != NULL) - *error = g_strdup_printf("macro '%s' does not exist", name); + *error = df_error_new_printf(DF_ERROR_GENERIC, NULL, "macro '%s' does not exist", name); return NULL; } @@ -68,8 +67,9 @@ static gchar* dfilter_macro_resolve(gchar* name, gchar** args, gchar** error) { if (argc != m->argc) { if (error != NULL) { - *error = ws_strdup_printf("wrong number of arguments for macro '%s', expecting %d instead of %d", - name, m->argc, argc); + *error = df_error_new_printf(DF_ERROR_GENERIC, NULL, + "wrong number of arguments for macro '%s', expecting %d instead of %d", + name, m->argc, argc); } return NULL; } @@ -132,7 +132,7 @@ static gboolean start_is_field_reference(const char *start) return TRUE; } -static gchar* dfilter_macro_apply_recurse(const gchar* text, guint depth, gchar** error) { +static gchar* dfilter_macro_apply_recurse(const gchar* text, guint depth, df_error_t** error) { enum { OUTSIDE, STARTING, NAME, ARGS } state = OUTSIDE; GString* out; GString* name = NULL; @@ -144,7 +144,7 @@ static gchar* dfilter_macro_apply_recurse(const gchar* text, guint depth, gchar* if ( depth > 31) { if (error != NULL) - *error = g_strdup("too much nesting in macros"); + *error = df_error_new_msg("too much nesting in macros"); return NULL; } @@ -238,11 +238,11 @@ static gchar* dfilter_macro_apply_recurse(const gchar* text, guint depth, gchar* state = OUTSIDE; } else if ( c == '\0') { if (error != NULL) - *error = g_strdup("end of filter in the middle of a macro expression"); + *error = df_error_new_msg("end of filter in the middle of a macro expression"); goto on_error; } else { if (error != NULL) - *error = g_strdup("invalid character in macro name"); + *error = df_error_new_msg("invalid character in macro name"); goto on_error; } break; @@ -250,7 +250,7 @@ static gchar* dfilter_macro_apply_recurse(const gchar* text, guint depth, gchar* switch(c) { case '\0': { if (error != NULL) - *error = g_strdup("end of filter in the middle of a macro expression"); + *error = df_error_new_msg("end of filter in the middle of a macro expression"); goto on_error; } case ';': { g_ptr_array_add(args,g_string_free(arg,FALSE)); @@ -264,7 +264,7 @@ static gchar* dfilter_macro_apply_recurse(const gchar* text, guint depth, gchar* break; } else { if (error != NULL) - *error = g_strdup("end of filter in the middle of a macro expression"); + *error = df_error_new_msg("end of filter in the middle of a macro expression"); goto on_error; } } default: { @@ -316,14 +316,14 @@ on_error: FREE_ALL(); if (error != NULL) { if (*error == NULL) - *error = g_strdup("unknown error in macro expression"); + *error = df_error_new_msg("unknown error in macro expression"); } g_string_free(out,TRUE); return NULL; } } -gchar* dfilter_macro_apply(const gchar* text, gchar** error) { +gchar* dfilter_macro_apply(const gchar* text, df_error_t** error) { return dfilter_macro_apply_recurse(text, 0, error); } diff --git a/epan/dfilter/dfilter-macro.h b/epan/dfilter/dfilter-macro.h index d5c0c46982..896b02fee5 100644 --- a/epan/dfilter/dfilter-macro.h +++ b/epan/dfilter/dfilter-macro.h @@ -11,7 +11,7 @@ #define _DFILTER_MACRO_H #include - +#include "dfilter.h" #define DFILTER_MACRO_FILENAME "dfilter_macros" @@ -30,7 +30,7 @@ typedef struct _dfilter_macro_t { } dfilter_macro_t; /* applies all macros to the given text and returns the resulting string or NULL on failure */ -gchar* dfilter_macro_apply(const gchar* text, gchar** error); +gchar* dfilter_macro_apply(const gchar* text, df_error_t** error); void dfilter_macro_init(void); diff --git a/epan/dfilter/dfilter.c b/epan/dfilter/dfilter.c index 9c21e66998..a3d2be240c 100644 --- a/epan/dfilter/dfilter.c +++ b/epan/dfilter/dfilter.c @@ -44,12 +44,10 @@ dfilter_vfail(dfwork_t *dfw, int code, df_loc_t loc, dfw->parse_failure = TRUE; /* If we've already reported one error, don't overwite it */ - if (dfw->error.code < 0 || dfw->error.msg != NULL) + if (dfw->error != NULL) return; - dfw->error.code = code; - dfw->error.msg = ws_strdup_vprintf(format, args); - dfw->error.loc = loc; + dfw->error = df_error_new_vprintf(code, &loc, format, args); } void @@ -77,7 +75,8 @@ dfilter_fail_throw(dfwork_t *dfw, int code, df_loc_t loc, const char *format, .. void dfw_set_error_location(dfwork_t *dfw, df_loc_t loc) { - dfw->error.loc = loc; + ws_assert(dfw->error); + dfw->error->loc = loc; } header_field_info * @@ -211,9 +210,6 @@ dfwork_new(void) { dfwork_t *dfw = g_new0(dfwork_t, 1); - dfw_error_init(&dfw->error); - dfw->warnings = NULL; - dfw->references = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify)free_refs_array); @@ -266,6 +262,9 @@ dfwork_free(dfwork_t *dfw) g_free(dfw->expanded_text); + if (dfw->error) + df_error_free(&dfw->error); + wmem_destroy_allocator(dfw->dfw_scope); /* @@ -349,14 +348,14 @@ add_compile_warning(dfwork_t *dfw, const char *format, ...) } char * -dfilter_expand(const char *expr, char **err_ret) +dfilter_expand(const char *expr, df_error_t **err_ret) { return dfilter_macro_apply(expr, err_ret); } gboolean dfilter_compile_real(const gchar *text, dfilter_t **dfp, - df_error_t **errpp, unsigned flags, + df_error_t **err_ptr, unsigned flags, const char *caller) { int token; @@ -375,7 +374,8 @@ dfilter_compile_real(const gchar *text, dfilter_t **dfp, ws_debug("%s() called from %s() with null filter", __func__, caller); /* XXX This BUG happens often. Some callers are ignoring these errors. */ - dfw_error_set_msg(errpp, "BUG: NULL text pointer passed to dfilter_compile"); + if (err_ptr) + *err_ptr = df_error_new_msg("BUG: NULL text pointer passed to dfilter_compile"); return FALSE; } else if (*text == '\0') { @@ -392,7 +392,7 @@ dfilter_compile_real(const gchar *text, dfilter_t **dfp, dfw->apply_optimization = flags & DF_OPTIMIZE; if (flags & DF_EXPAND_MACROS) { - dfw->expanded_text = dfilter_macro_apply(text, &dfw->error.msg); + dfw->expanded_text = dfilter_macro_apply(text, &dfw->error); if (dfw->expanded_text == NULL) { goto FAILURE; } @@ -404,7 +404,7 @@ dfilter_compile_real(const gchar *text, dfilter_t **dfp, } if (df_yylex_init(&scanner) != 0) { - dfw_error_set_msg(errpp, "Can't initialize scanner: %s", g_strerror(errno)); + dfw->error = df_error_new_printf(DF_ERROR_GENERIC, NULL, "Can't initialize scanner: %s", g_strerror(errno)); goto FAILURE; } @@ -551,14 +551,18 @@ dfilter_compile_real(const gchar *text, dfilter_t **dfp, FAILURE: ws_assert(dfw); - if (dfw->error.msg == NULL) { + if (dfw->error == NULL || dfw->error->msg == NULL) { /* We require an error message. */ ws_critical("Unknown error compiling filter: %s", text); - dfw_error_set_msg(errpp, "Unknown error compiling filter: %s", text); + if (err_ptr) + *err_ptr = df_error_new_printf(DF_ERROR_GENERIC, NULL, "Unknown error compiling filter: %s", text); } else { - ws_debug("Compiling filter failed with error: %s.", dfw->error.msg); - dfw_error_take(errpp, &dfw->error); + ws_debug("Compiling filter failed with error: %s.", dfw->error->msg); + if (err_ptr) { + *err_ptr = dfw->error; + dfw->error = NULL; + } } dfwork_free(dfw); @@ -761,61 +765,58 @@ reference_free(df_reference_t *ref) g_free(ref); } -void -dfw_error_init(df_error_t *err) { - err->code = 0; - err->msg = NULL; - err->loc.col_start = -1; - err->loc.col_len = 0; +df_error_t * +df_error_new(int code, const char *msg, df_loc_t *loc) +{ + df_error_t *err = g_new(df_error_t, 1); + err->code = code; + err->msg = ws_strdup(msg); + if (loc) { + err->loc.col_start = loc->col_start; + err->loc.col_len = loc->col_len; + } + else { + err->loc.col_start = -1; + err->loc.col_len = 0; + } + return err; } -void -dfw_error_clear(df_error_t *err) { - g_free(err->msg); - dfw_error_init(err); +df_error_t * +df_error_new_vprintf(int code, df_loc_t *loc, const char *fmt, va_list ap) +{ + df_error_t *err = g_new(df_error_t, 1); + err->code = code; + err->msg = ws_strdup_vprintf(fmt, ap); + if (loc) { + err->loc.col_start = loc->col_start; + err->loc.col_len = loc->col_len; + } + else { + err->loc.col_start = -1; + err->loc.col_len = 0; + } + return err; } -void -dfw_error_set_msg(df_error_t **errpp, const char *fmt, ...) +df_error_t * +df_error_new_printf(int code, df_loc_t *loc, const char *fmt, ...) { - if (errpp == NULL) { - return; - } va_list ap; - - df_error_t *errp = g_new(df_error_t, 1); - errp->code = DF_ERROR_GENERIC; va_start(ap, fmt); - errp->msg = ws_strdup_vprintf(fmt, ap); + df_error_t *err = df_error_new_vprintf(code, loc, fmt, ap); va_end(ap); - errp->loc.col_start = -1; - errp->loc.col_len = 0; - *errpp = errp; -} - -void -dfw_error_take(df_error_t **errpp, df_error_t *src) -{ - if (errpp == NULL) { - g_free(src->msg); - dfw_error_init(src); - return; - } - df_error_t *errp = g_new(df_error_t, 1); - errp->code = src->code; - errp->msg = src->msg; - errp->loc = src->loc; - *errpp = errp; - dfw_error_init(src); + return err; } void -dfilter_error_free(df_error_t *errp) +df_error_free(df_error_t **ep) { - if (errp == NULL) + if (*ep == NULL) return; - g_free(errp->msg); - g_free(errp); + g_free((*ep)->msg); + g_free(*ep); + *ep = NULL; } /* diff --git a/epan/dfilter/dfilter.h b/epan/dfilter/dfilter.h index 12c46e3827..fcb47b059e 100644 --- a/epan/dfilter/dfilter.h +++ b/epan/dfilter/dfilter.h @@ -13,18 +13,43 @@ #include #include "dfilter-loc.h" +#include /* Passed back to user */ typedef struct epan_dfilter dfilter_t; -#include - #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ struct epan_dissect; +#define DF_ERROR_GENERIC -1 +#define DF_ERROR_UNEXPECTED_END -2 + +typedef struct { + int code; + char *msg; + df_loc_t loc; +} df_error_t; + +df_error_t * +df_error_new(int code, const char *msg, df_loc_t *loc); + +df_error_t * +df_error_new_printf(int code, df_loc_t *loc, const char *fmt, ...) +G_GNUC_PRINTF(3, 4); + +#define df_error_new_msg(msg) \ + df_error_new_printf(DF_ERROR_GENERIC, NULL, "%s", msg) + +df_error_t * +df_error_new_vprintf(int code, df_loc_t *loc, const char *fmt, va_list ap); + +WS_DLL_PUBLIC +void +df_error_free(df_error_t **ep); + /* Module-level initialization */ void dfilter_init(void); @@ -36,7 +61,18 @@ dfilter_cleanup(void); /* Perform macro expansion. */ WS_DLL_PUBLIC char * -dfilter_expand(const char *expr, char **err_ret); +dfilter_expand(const char *expr, df_error_t **err_ret); + +/* Save textual representation of syntax tree (for debugging purposes). */ +#define DF_SAVE_TREE (1U << 0) +/* Perform macro substitution on filter text. */ +#define DF_EXPAND_MACROS (1U << 1) +/* Do an optimization pass on the compiled filter. */ +#define DF_OPTIMIZE (1U << 2) +/* Enable debug trace for flex. */ +#define DF_DEBUG_FLEX (1U << 3) +/* Enable debug trace for lemon. */ +#define DF_DEBUG_LEMON (1U << 4) /* Compiles a string to a dfilter_t. * On success, sets the dfilter* pointed to by dfp @@ -52,31 +88,6 @@ dfilter_expand(const char *expr, char **err_ret); * * Returns TRUE on success, FALSE on failure. */ - -#define DF_ERROR_GENERIC -1 -#define DF_ERROR_UNEXPECTED_END -2 - -typedef struct { - int code; - char *msg; - df_loc_t loc; -} df_error_t; - -WS_DLL_PUBLIC -void -dfilter_error_free(df_error_t *); - -/* Save textual representation of syntax tree (for debugging purposes). */ -#define DF_SAVE_TREE (1U << 0) -/* Perform macro substitution on filter text. */ -#define DF_EXPAND_MACROS (1U << 1) -/* Do an optimization pass on the compiled filter. */ -#define DF_OPTIMIZE (1U << 2) -/* Enable debug trace for flex. */ -#define DF_DEBUG_FLEX (1U << 3) -/* Enable debug trace for lemon. */ -#define DF_DEBUG_LEMON (1U << 4) - WS_DLL_PUBLIC gboolean dfilter_compile_real(const gchar *text, dfilter_t **dfp, diff --git a/epan/dfilter/semcheck.c b/epan/dfilter/semcheck.c index 8683f96ff3..7944bf4409 100644 --- a/epan/dfilter/semcheck.c +++ b/epan/dfilter/semcheck.c @@ -151,9 +151,8 @@ compatible_ftypes(ftenum_t a, ftenum_t b) /* Don't set the error message if it's already set. */ #define SET_ERROR(dfw, str) \ do { \ - if ((str) != NULL && (dfw)->error.msg == NULL) { \ - (dfw)->error.msg = str; \ - (dfw)->error.code = DF_ERROR_GENERIC; \ + if ((str) != NULL && (dfw)->error == NULL) { \ + (dfw)->error = df_error_new_msg(str); \ } \ else { \ g_free(str); \ @@ -181,7 +180,7 @@ dfilter_fvalue_from_literal(dfwork_t *dfw, ftenum_t ftype, stnode_t *st, * to an item from value_string. */ if (fv) { - dfw_error_clear(&dfw->error); + df_error_free(&dfw->error); } } if (fv == NULL) { @@ -212,7 +211,7 @@ dfilter_fvalue_from_string(dfwork_t *dfw, ftenum_t ftype, stnode_t *st, * to an item from value_string. */ if (fv) { - dfw_error_clear(&dfw->error); + df_error_free(&dfw->error); } } if (fv == NULL) { @@ -330,7 +329,7 @@ mk_fvalue_from_val_string(dfwork_t *dfw, header_field_info *hfinfo, const char * * Prefer this error message to whatever error message * has already been set. */ - dfw_error_clear(&dfw->error); + df_error_free(&dfw->error); dfilter_fail(dfw, DF_ERROR_GENERIC, loc, "\"%s\" cannot be found among the possible values for %s.", s, hfinfo->abbrev); return NULL; @@ -347,7 +346,7 @@ mk_fvalue_from_val_string(dfwork_t *dfw, header_field_info *hfinfo, const char * /* Reset the error message, since *something* interesting will happen, * and the error message will be more interesting than any error message * I happen to have now. */ - dfw_error_clear(&dfw->error); + df_error_free(&dfw->error); if (hfinfo->display & BASE_RANGE_STRING) { dfilter_fail(dfw, DF_ERROR_GENERIC, loc, "\"%s\" cannot accept [range] strings as values.", diff --git a/epan/dissectors/packet-ncp2222.inc b/epan/dissectors/packet-ncp2222.inc index 96c67f4b7d..85445b6e8b 100644 --- a/epan/dissectors/packet-ncp2222.inc +++ b/epan/dissectors/packet-ncp2222.inc @@ -7093,7 +7093,7 @@ ncp2222_compile_dfilters(void) &req_conds[i].dfilter, &df_err)) { g_error("NCP dissector failed to compile dfilter \"%s\": %s\n", req_conds[i].dfilter_text, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); ws_assert_not_reached(); } } diff --git a/epan/tap.c b/epan/tap.c index da0b378d44..8311de7dc6 100644 --- a/epan/tap.c +++ b/epan/tap.c @@ -560,7 +560,7 @@ register_tap_listener(const char *tapname, void *tapdata, const char *fstring, g_string_printf(error_string, "Filter \"%s\" is invalid - %s", fstring, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); free_tap_listener(tl); return error_string; } @@ -621,7 +621,7 @@ set_tap_dfilter(void *tapdata, const char *fstring) g_string_printf(error_string, "Filter \"%s\" is invalid - %s", fstring, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); return error_string; } } diff --git a/epan/wslua/wslua_field.c b/epan/wslua/wslua_field.c index b7a409d0eb..1134bc761a 100644 --- a/epan/wslua/wslua_field.c +++ b/epan/wslua/wslua_field.c @@ -587,7 +587,7 @@ void lua_prime_all_fields(proto_tree* tree _U_) { g_string_free(error,TRUE); } else if (!dfilter_compile(fake_tap_filter->str, &wslua_dfilter, &df_err)) { report_failure("while compiling dfilter \"%s\" for wslua: %s", fake_tap_filter->str, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); } } g_string_free(fake_tap_filter, TRUE); diff --git a/file.c b/file.c index 164786c28c..5908929cfe 100644 --- a/file.c +++ b/file.c @@ -1501,7 +1501,7 @@ cf_filter_packets(capture_file *cf, gchar *dftext, gboolean force) "See the help for a description of the display filter syntax.", "\"%s\" isn't a valid display filter: %s", dftext, df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); g_free(dftext); return CF_ERROR; } diff --git a/packaging/debian/libwireshark0.symbols b/packaging/debian/libwireshark0.symbols index 9ec29a85a7..6edc35b40a 100644 --- a/packaging/debian/libwireshark0.symbols +++ b/packaging/debian/libwireshark0.symbols @@ -279,7 +279,6 @@ libwireshark.so.0 libwireshark0 #MINVER# dfilter_compile_real@Base 3.7.0 dfilter_deprecated_tokens@Base 1.9.1 dfilter_dump@Base 1.9.1 - dfilter_error_free@Base 4.1.0 dfilter_expand@Base 3.7.0 dfilter_free@Base 1.9.1 dfilter_load_field_references@Base 3.7.0 diff --git a/rawshark.c b/rawshark.c index 74cfe22cb8..01996e3a78 100644 --- a/rawshark.c +++ b/rawshark.c @@ -751,7 +751,7 @@ main(int argc, char *argv[]) for (i = 0; i < n_rfilters; i++) { if (!dfilter_compile(rfilters[i], &rfcodes[n_rfcodes], &df_err)) { cmdarg_err("%s", df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); ret = INVALID_DFILTER; goto clean_exit; } diff --git a/sharkd_session.c b/sharkd_session.c index d4e9aa8656..5add951666 100644 --- a/sharkd_session.c +++ b/sharkd_session.c @@ -4099,7 +4099,7 @@ sharkd_session_process_check(char *buf, const jsmntok_t *tokens, int count) sharkd_json_simple_ok(rpcid); dfilter_free(dfp); - dfilter_error_free(df_err); + df_error_free(&df_err); return 0; } else @@ -4108,7 +4108,7 @@ sharkd_session_process_check(char *buf, const jsmntok_t *tokens, int count) rpcid, -5001, NULL, "Filter invalid - %s", df_err->msg ); - dfilter_error_free(df_err); + df_error_free(&df_err); return -5001; } } diff --git a/tfshark.c b/tfshark.c index ad548a3914..46b0c613a0 100644 --- a/tfshark.c +++ b/tfshark.c @@ -861,7 +861,7 @@ main(int argc, char *argv[]) if (rfilter != NULL) { if (!dfilter_compile(rfilter, &rfcode, &df_err)) { cmdarg_err("%s", df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); exit_status = WS_EXIT_INVALID_FILTER; goto clean_exit; } @@ -871,7 +871,7 @@ main(int argc, char *argv[]) if (dfilter != NULL) { if (!dfilter_compile(dfilter, &dfcode, &df_err)) { cmdarg_err("%s", df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); exit_status = WS_EXIT_INVALID_FILTER; goto clean_exit; } diff --git a/tshark.c b/tshark.c index 0dd751f6a1..9022fd3a8a 100644 --- a/tshark.c +++ b/tshark.c @@ -640,15 +640,14 @@ static gboolean _compile_dfilter(const char *text, dfilter_t **dfp, const char *caller) { gboolean ok; - char *err_msg = NULL; df_error_t *df_err; char *err_off; char *expanded; - expanded = dfilter_expand(text, &err_msg); + expanded = dfilter_expand(text, &df_err); if (expanded == NULL) { - cmdarg_err("%s", err_msg); - g_free(err_msg); + cmdarg_err("%s", df_err->msg); + df_error_free(&df_err); return FALSE; } @@ -662,7 +661,7 @@ _compile_dfilter(const char *text, dfilter_t **dfp, const char *caller) cmdarg_err_cont(" %s", err_off); g_free(err_off); } - dfilter_error_free(df_err); + df_error_free(&df_err); } g_free(expanded); diff --git a/ui/logray/logray_main.cpp b/ui/logray/logray_main.cpp index 4a30a8e431..b572d6350f 100644 --- a/ui/logray/logray_main.cpp +++ b/ui/logray/logray_main.cpp @@ -962,7 +962,7 @@ int main(int argc, char *qt_argv[]) QObject::tr("The filter expression %1 isn't a valid display filter. (%2).") .arg(global_commandline_info.jfilter, df_err->msg), QMessageBox::Ok); - dfilter_error_free(df_err); + df_error_free(&df_err); } else { /* Filter ok, jump to the first packet matching the filter conditions. Default search direction is forward, but if diff --git a/ui/logray/logray_main_window.cpp b/ui/logray/logray_main_window.cpp index 4574df7313..0d7d5aa100 100644 --- a/ui/logray/logray_main_window.cpp +++ b/ui/logray/logray_main_window.cpp @@ -1178,7 +1178,7 @@ void LograyMainWindow::mergeCaptureFile() QMessageBox::warning(this, tr("Invalid Read Filter"), QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, df_err->msg)), QMessageBox::Ok); - dfilter_error_free(df_err); + df_error_free(&df_err); continue; } } else { diff --git a/ui/logray/logray_main_window_slots.cpp b/ui/logray/logray_main_window_slots.cpp index 89ec698206..b734cfd2d8 100644 --- a/ui/logray/logray_main_window_slots.cpp +++ b/ui/logray/logray_main_window_slots.cpp @@ -206,7 +206,7 @@ bool LograyMainWindow::openCaptureFile(QString cf_path, QString read_filter, uns QString(" isn't a valid display filter. (") + df_err->msg + QString(")."), QMessageBox::Ok); - dfilter_error_free(df_err); + df_error_free(&df_err); if (!name_param) { // go back to the selection dialogue only if the file diff --git a/ui/qt/coloring_rules_dialog.cpp b/ui/qt/coloring_rules_dialog.cpp index df178ec101..d1ff0d5827 100644 --- a/ui/qt/coloring_rules_dialog.cpp +++ b/ui/qt/coloring_rules_dialog.cpp @@ -164,7 +164,7 @@ bool ColoringRulesDialog::isValidFilter(QString filter, QString * error) if (df_err) { error->append(df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); } return false; diff --git a/ui/qt/iax2_analysis_dialog.cpp b/ui/qt/iax2_analysis_dialog.cpp index 70d65f8b13..bd9a534a07 100644 --- a/ui/qt/iax2_analysis_dialog.cpp +++ b/ui/qt/iax2_analysis_dialog.cpp @@ -299,7 +299,7 @@ Iax2AnalysisDialog::Iax2AnalysisDialog(QWidget &parent, CaptureFile &cf) : /* Try to compile the filter. */ if (!dfilter_compile(filter_text, &sfcode, &df_err)) { err_str_ = QString(df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); updateWidgets(); return; } diff --git a/ui/qt/io_graph_dialog.cpp b/ui/qt/io_graph_dialog.cpp index 51b50a2f79..c2c6f3b628 100644 --- a/ui/qt/io_graph_dialog.cpp +++ b/ui/qt/io_graph_dialog.cpp @@ -1729,7 +1729,7 @@ void IOGraph::setFilter(const QString &filter) dfilter_free(dfilter); if (!status) { config_err_ = QString::fromUtf8(df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); filter_ = full_filter; return; } diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp index b52635fb08..f74d33a1de 100644 --- a/ui/qt/main.cpp +++ b/ui/qt/main.cpp @@ -991,7 +991,7 @@ int main(int argc, char *qt_argv[]) QObject::tr("The filter expression %1 isn't a valid display filter. (%2).") .arg(global_commandline_info.jfilter, df_err->msg), QMessageBox::Ok); - dfilter_error_free(df_err); + df_error_free(&df_err); } else { /* Filter ok, jump to the first packet matching the filter conditions. Default search direction is forward, but if diff --git a/ui/qt/widgets/display_filter_edit.cpp b/ui/qt/widgets/display_filter_edit.cpp index bd11f328fa..3748046498 100644 --- a/ui/qt/widgets/display_filter_edit.cpp +++ b/ui/qt/widgets/display_filter_edit.cpp @@ -541,7 +541,7 @@ void DisplayFilterEdit::buildCompletionList(const QString &field_word, const QSt autocomplete_accepts_field_ = false; } dfilter_free(test_df); - dfilter_error_free(df_err); + df_error_free(&df_err); filter_word_preamble_ = preamble; } diff --git a/ui/qt/widgets/syntax_line_edit.cpp b/ui/qt/widgets/syntax_line_edit.cpp index 69afe225f0..78cb7283e9 100644 --- a/ui/qt/widgets/syntax_line_edit.cpp +++ b/ui/qt/widgets/syntax_line_edit.cpp @@ -238,7 +238,7 @@ bool SyntaxLineEdit::checkDisplayFilter(QString filter) setSyntaxState(SyntaxLineEdit::Invalid); syntax_error_message_ = QString::fromUtf8(df_err->msg); syntax_error_message_full_ = createSyntaxErrorMessageFull(filter, syntax_error_message_, df_err->loc.col_start, df_err->loc.col_len); - dfilter_error_free(df_err); + df_error_free(&df_err); } dfilter_free(dfp); diff --git a/ui/qt/wireshark_main_window.cpp b/ui/qt/wireshark_main_window.cpp index db1d56e0dd..39766c5d58 100644 --- a/ui/qt/wireshark_main_window.cpp +++ b/ui/qt/wireshark_main_window.cpp @@ -1218,7 +1218,7 @@ void WiresharkMainWindow::mergeCaptureFile() QMessageBox::warning(this, tr("Invalid Read Filter"), QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, df_err->msg)), QMessageBox::Ok); - dfilter_error_free(df_err); + df_error_free(&df_err); continue; } } else { @@ -3053,7 +3053,7 @@ QString WiresharkMainWindow::findRtpStreams(QVector *stream_id /* Try to compile the filter. */ if (!dfilter_compile(filter_text, &sfcode, &df_err)) { QString err = QString(df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); return err; } diff --git a/ui/qt/wireshark_main_window_slots.cpp b/ui/qt/wireshark_main_window_slots.cpp index 129739c1c1..523355876c 100644 --- a/ui/qt/wireshark_main_window_slots.cpp +++ b/ui/qt/wireshark_main_window_slots.cpp @@ -234,7 +234,7 @@ bool WiresharkMainWindow::openCaptureFile(QString cf_path, QString read_filter, QString(" isn't a valid display filter. (") + df_err->msg + QString(")."), QMessageBox::Ok); - dfilter_error_free(df_err); + df_error_free(&df_err); if (!name_param) { // go back to the selection dialogue only if the file // was selected from this dialogue diff --git a/ui/tap-tcp-stream.c b/ui/tap-tcp-stream.c index 4440606fed..2f96441a83 100644 --- a/ui/tap-tcp-stream.c +++ b/ui/tap-tcp-stream.c @@ -267,7 +267,7 @@ select_tcpip_session(capture_file *cf) /* no real filter yet */ if (!dfilter_compile("tcp", &sfcode, &df_err)) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", df_err->msg); - dfilter_error_free(df_err); + df_error_free(&df_err); return G_MAXUINT32; } -- cgit v1.2.3