aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2023-04-15 00:18:53 +0100
committerJoão Valverde <j@v6e.pt>2023-04-20 14:12:39 +0000
commit81a8777b9f4929a869f81a4039a2302b3bf2a107 (patch)
treef9bc2b4277dde28860657bf4a66639347c2b7045
parent2faaf6c33b2c527f68e28ad8e126088065b6464e (diff)
dfilter: Make error a pointer
Make it easier and more natural to test for errors and hand-over error results.
-rw-r--r--dftest.c10
-rw-r--r--epan/color_filters.c8
-rw-r--r--epan/dfilter/dfilter-int.h11
-rw-r--r--epan/dfilter/dfilter-macro.c28
-rw-r--r--epan/dfilter/dfilter-macro.h4
-rw-r--r--epan/dfilter/dfilter.c119
-rw-r--r--epan/dfilter/dfilter.h67
-rw-r--r--epan/dfilter/semcheck.c13
-rw-r--r--epan/dissectors/packet-ncp2222.inc2
-rw-r--r--epan/tap.c4
-rw-r--r--epan/wslua/wslua_field.c2
-rw-r--r--file.c2
-rw-r--r--packaging/debian/libwireshark0.symbols1
-rw-r--r--rawshark.c2
-rw-r--r--sharkd_session.c4
-rw-r--r--tfshark.c4
-rw-r--r--tshark.c9
-rw-r--r--ui/logray/logray_main.cpp2
-rw-r--r--ui/logray/logray_main_window.cpp2
-rw-r--r--ui/logray/logray_main_window_slots.cpp2
-rw-r--r--ui/qt/coloring_rules_dialog.cpp2
-rw-r--r--ui/qt/iax2_analysis_dialog.cpp2
-rw-r--r--ui/qt/io_graph_dialog.cpp2
-rw-r--r--ui/qt/main.cpp2
-rw-r--r--ui/qt/widgets/display_filter_edit.cpp2
-rw-r--r--ui/qt/widgets/syntax_line_edit.cpp2
-rw-r--r--ui/qt/wireshark_main_window.cpp4
-rw-r--r--ui/qt/wireshark_main_window_slots.cpp2
-rw-r--r--ui/tap-tcp-stream.c2
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 <stdio.h>
@@ -17,8 +18,6 @@
#include <string.h>
#include "dfilter-int.h"
-#include "dfilter.h"
-#include "dfilter-macro.h"
#include <ftypes/ftypes.h>
#include <epan/uat-int.h>
#include <epan/proto.h>
@@ -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 <wireshark.h>
-
+#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 <wireshark.h>
#include "dfilter-loc.h"
+#include <epan/proto.h>
/* Passed back to user */
typedef struct epan_dfilter dfilter_t;
-#include <epan/proto.h>
-
#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<rtpstream_id_t *> *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;
}