aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/capture.c2
-rw-r--r--ui/gtk/capture_file_dlg.c12
-rw-r--r--ui/gtk/color_edit_dlg.c6
-rw-r--r--ui/gtk/dfilter_expr_dlg.c23
-rw-r--r--ui/gtk/filter_dlg.c56
-rw-r--r--ui/gtk/find_dlg.c9
-rw-r--r--ui/gtk/funnel_stat.c13
-rw-r--r--ui/gtk/gui_utils.c5
-rw-r--r--ui/gtk/gui_utils.h5
-rw-r--r--ui/gtk/iax2_analysis.c6
-rw-r--r--ui/gtk/io_stat.c6
-rw-r--r--ui/gtk/main.c13
-rw-r--r--ui/gtk/main_menubar.c2
-rw-r--r--ui/gtk/rlc_lte_graph.c6
-rw-r--r--ui/gtk/rtp_analysis.c6
-rw-r--r--ui/gtk/sctp_assoc_analyse.c6
-rw-r--r--ui/qt/display_filter_edit.cpp6
-rw-r--r--ui/qt/io_graph_dialog.cpp6
-rw-r--r--ui/qt/main_window.cpp7
-rw-r--r--ui/qt/main_window_slots.cpp8
-rw-r--r--ui/qt/search_frame.cpp2
-rw-r--r--ui/qt/syntax_line_edit.cpp18
-rw-r--r--ui/qt/syntax_line_edit.h2
-rw-r--r--ui/tap-tcp-stream.c6
24 files changed, 127 insertions, 104 deletions
diff --git a/ui/capture.c b/ui/capture.c
index 254cda3f4e..1a9543db42 100644
--- a/ui/capture.c
+++ b/ui/capture.c
@@ -514,7 +514,7 @@ capture_input_cfilter_error_message(capture_session *cap_session, guint i,
safe_descr = simple_dialog_format_message(interface_opts.descr);
safe_cfilter_error_msg = simple_dialog_format_message(error_message);
/* Did the user try a display filter? */
- if (dfilter_compile(interface_opts.cfilter, &rfcode) && rfcode != NULL) {
+ if (dfilter_compile(interface_opts.cfilter, &rfcode, NULL) && rfcode != NULL) {
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
"%sInvalid capture filter \"%s\" for interface %s.%s\n"
"\n"
diff --git a/ui/gtk/capture_file_dlg.c b/ui/gtk/capture_file_dlg.c
index 030a10b8c6..6d94cf796b 100644
--- a/ui/gtk/capture_file_dlg.c
+++ b/ui/gtk/capture_file_dlg.c
@@ -684,6 +684,7 @@ file_open_cmd(capture_file *cf, GtkWidget *w _U_)
GString *file_name = g_string_new("");
GString *display_filter = g_string_new("");
dfilter_t *rfcode = NULL;
+ gchar *err_msg;
int err;
int type = WTAP_TYPE_AUTO;
@@ -700,12 +701,13 @@ file_open_cmd(capture_file *cf, GtkWidget *w _U_)
/* Only close the old file now that we know we want to open another one. */
cf_close(cf);
/* apply our filter */
- if (dfilter_compile(display_filter->str, &rfcode)) {
+ if (dfilter_compile(display_filter->str, &rfcode, &err_msg)) {
cf_set_rfcode(&cfile, rfcode);
} else {
/* Not valid. Tell the user, and go back and run the file
selection box again once they dismiss the alert. */
- bad_dfilter_alert_box(top_level, display_filter->str);
+ bad_dfilter_alert_box(top_level, display_filter->str, err_msg);
+ g_free(err_msg);
continue;
}
@@ -935,6 +937,7 @@ file_merge_cmd(GtkWidget *w _U_)
GString *display_filter = g_string_new("");
int merge_type;
dfilter_t *rfcode = NULL;
+ gchar *err_msg;
int err;
int file_type;
cf_status_t merge_status;
@@ -954,10 +957,11 @@ file_merge_cmd(GtkWidget *w _U_)
#endif /* USE_WIN32_FILE_DIALOGS */
/* Get the specified read filter and try to compile it. */
- if (!dfilter_compile(display_filter->str, &rfcode)) {
+ if (!dfilter_compile(display_filter->str, &rfcode, &err_msg)) {
/* Not valid. Tell the user, and go back and run the file
selection box again once they dismiss the alert. */
- bad_dfilter_alert_box(top_level, display_filter->str);
+ bad_dfilter_alert_box(top_level, display_filter->str, err_msg);
+ g_free(err_msg);
continue;
}
diff --git a/ui/gtk/color_edit_dlg.c b/ui/gtk/color_edit_dlg.c
index d9c2354f60..33aa800c9c 100644
--- a/ui/gtk/color_edit_dlg.c
+++ b/ui/gtk/color_edit_dlg.c
@@ -369,6 +369,7 @@ color_edit_dlg_ok_cb(GtkWidget *w _U_, gpointer user_data)
gboolean filter_disabled;
color_filter_t *colorf;
dfilter_t *compiled_filter;
+ gchar *err_msg;
GtkTreeModel *model;
GtkTreeIter iter;
gchar fg_str[14], bg_str[14];
@@ -386,11 +387,12 @@ color_edit_dlg_ok_cb(GtkWidget *w _U_, gpointer user_data)
return;
}
- if (!dfilter_compile(filter_text, &compiled_filter)) {
+ if (!dfilter_compile(filter_text, &compiled_filter, &err_msg)) {
simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK,
"Filter \"%s\" didn't compile correctly.\n"
" Please try again. Filter unchanged.\n%s\n", filter_name,
- dfilter_error_msg);
+ err_msg);
+ g_free(err_msg);
g_free(filter_name);
g_free(filter_text);
return;
diff --git a/ui/gtk/dfilter_expr_dlg.c b/ui/gtk/dfilter_expr_dlg.c
index affc7f806c..4256090b3c 100644
--- a/ui/gtk/dfilter_expr_dlg.c
+++ b/ui/gtk/dfilter_expr_dlg.c
@@ -583,19 +583,6 @@ value_list_sel_cb(GtkTreeSelection *sel, gpointer value_entry_arg)
}
static void
-dfilter_report_bad_value(const char *format, ...)
-{
- char error_msg_buf[1024];
- va_list args;
-
- va_start(args, format);
- g_vsnprintf(error_msg_buf, sizeof error_msg_buf, format, args);
- va_end(args);
-
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", error_msg_buf);
-}
-
-static void
dfilter_expr_dlg_accept_cb(GtkWidget *w, gpointer filter_te_arg)
{
GtkWidget *filter_te = (GtkWidget *)filter_te_arg;
@@ -615,6 +602,7 @@ dfilter_expr_dlg_accept_cb(GtkWidget *w, gpointer filter_te_arg)
ftenum_t ftype;
gboolean can_compare;
fvalue_t *fvalue;
+ gchar *err_msg;
GtkTreeModel *model;
GtkTreeIter iter;
gboolean quote_it;
@@ -743,19 +731,18 @@ dfilter_expr_dlg_accept_cb(GtkWidget *w, gpointer filter_te_arg)
*/
if (strcmp(item_str, "contains") == 0) {
fvalue = fvalue_from_unparsed(ftype, stripped_value_str, TRUE,
- dfilter_report_bad_value);
+ &err_msg);
}
else {
fvalue = fvalue_from_unparsed(ftype, stripped_value_str, FALSE,
- dfilter_report_bad_value);
+ &err_msg);
}
if (fvalue == NULL) {
/*
* It's not valid.
- *
- * The dialog box was already popped up by
- * "dfilter_report_bad_value()".
*/
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_msg);
+ g_free(err_msg);
g_free(range_str);
g_free(value_str);
g_free(item_str);
diff --git a/ui/gtk/filter_dlg.c b/ui/gtk/filter_dlg.c
index f5a68b579e..a12a7bfd9c 100644
--- a/ui/gtk/filter_dlg.c
+++ b/ui/gtk/filter_dlg.c
@@ -1345,7 +1345,7 @@ filter_te_syntax_check_cb(GtkWidget *w, gpointer user_data _U_)
statusbar_pop_filter_msg();
}
- if (strval && g_object_get_data(G_OBJECT(w), E_FILT_MULTI_FIELD_NAME_ONLY_KEY)) {
+ if (g_object_get_data(G_OBJECT(w), E_FILT_MULTI_FIELD_NAME_ONLY_KEY)) {
gchar **fields;
guint i_field = 0;
@@ -1369,41 +1369,41 @@ filter_te_syntax_check_cb(GtkWidget *w, gpointer user_data _U_)
/* colorize filter string entry */
if (g_object_get_data(G_OBJECT(w), E_FILT_FIELD_NAME_ONLY_KEY) &&
- strval && (c = proto_check_field_name(strval)) != 0)
+ (c = proto_check_field_name(strval)) != 0)
{
colorize_filter_te_as_invalid(w);
if (use_statusbar) {
statusbar_push_filter_msg(" Illegal character in field name: '%c'", c);
}
- } else if (strval && dfilter_compile(strval, &dfp)) {
- if (dfp != NULL) {
- depr = dfilter_deprecated_tokens(dfp);
- }
- if (strlen(strval) == 0) {
- colorize_filter_te_as_empty(w);
- } else if (depr) {
- /* You keep using that word. I do not think it means what you think it means. */
- colorize_filter_te_as_deprecated(w);
- if (use_statusbar) {
- /*
- * We're being lazy and only printing the first "problem" token.
- * Would it be better to print all of them?
- */
- statusbar_push_temporary_msg(" \"%s\" may have unexpected results (see the User's Guide)",
- (const char *) g_ptr_array_index(depr, 0));
- }
- } else {
- colorize_filter_te_as_valid(w);
- }
- dfilter_free(dfp);
} else {
- colorize_filter_te_as_invalid(w);
- if (use_statusbar) {
- if (dfilter_error_msg) {
- statusbar_push_filter_msg(" Invalid filter: %s", dfilter_error_msg);
+ gchar *err_msg;
+
+ if (dfilter_compile(strval, &dfp, &err_msg)) {
+ if (dfp != NULL) {
+ depr = dfilter_deprecated_tokens(dfp);
+ }
+ if (strlen(strval) == 0) {
+ colorize_filter_te_as_empty(w);
+ } else if (depr) {
+ /* You keep using that word. I do not think it means what you think it means. */
+ colorize_filter_te_as_deprecated(w);
+ if (use_statusbar) {
+ /*
+ * We're being lazy and only printing the first "problem" token.
+ * Would it be better to print all of them?
+ */
+ statusbar_push_temporary_msg(" \"%s\" may have unexpected results (see the User's Guide)",
+ (const char *) g_ptr_array_index(depr, 0));
+ }
} else {
- statusbar_push_filter_msg(" Invalid filter");
+ colorize_filter_te_as_valid(w);
}
+ dfilter_free(dfp);
+ } else {
+ colorize_filter_te_as_invalid(w);
+ if (use_statusbar)
+ statusbar_push_filter_msg(" Invalid filter: %s", err_msg);
+ g_free(err_msg);
}
}
}
diff --git a/ui/gtk/find_dlg.c b/ui/gtk/find_dlg.c
index faa9f48b83..7a128e552d 100644
--- a/ui/gtk/find_dlg.c
+++ b/ui/gtk/find_dlg.c
@@ -626,9 +626,12 @@ find_frame_ok_cb(GtkWidget *ok_bt _U_, gpointer parent_w)
/*
* Display filter search - try to compile the filter.
*/
- if (!dfilter_compile(filter_text, &sfcode)) {
+ gchar *err_msg;
+
+ if (!dfilter_compile(filter_text, &sfcode, &err_msg)) {
/* The attempt failed; report an error. */
- bad_dfilter_alert_box(GTK_WIDGET(parent_w), filter_text);
+ bad_dfilter_alert_box(GTK_WIDGET(parent_w), filter_text, err_msg);
+ g_free(err_msg);
return;
}
@@ -752,7 +755,7 @@ find_previous_next(GtkWidget *w, gpointer d, search_direction dir)
}
g_free(string);
} else {
- if (!dfilter_compile(cfile.sfilter, &sfcode)) {
+ if (!dfilter_compile(cfile.sfilter, &sfcode, NULL)) {
/*
* XXX - this shouldn't happen, as we've already successfully
* translated the string once.
diff --git a/ui/gtk/funnel_stat.c b/ui/gtk/funnel_stat.c
index 13bf97a3e6..c61de1bd1f 100644
--- a/ui/gtk/funnel_stat.c
+++ b/ui/gtk/funnel_stat.c
@@ -486,11 +486,11 @@ static void funnel_retap_packets(void) {
cf_retap_packets(&cfile);
}
-static gboolean funnel_open_file(const char* fname, const char* filter, const char** err_str) {
+static gboolean funnel_open_file(const char* fname, const char* filter, char** err_str) {
int err = 0;
dfilter_t *rfcode = NULL;
- *err_str = "no error";
+ *err_str = NULL;
switch (cfile.state) {
case FILE_CLOSED:
@@ -498,20 +498,19 @@ static gboolean funnel_open_file(const char* fname, const char* filter, const ch
case FILE_READ_ABORTED:
break;
case FILE_READ_IN_PROGRESS:
- *err_str = "file read in progress";
+ *err_str = g_strdup("file read in progress");
return FALSE;
}
if (filter) {
- if (!dfilter_compile(filter, &rfcode)) {
- *err_str = dfilter_error_msg ? dfilter_error_msg : "cannot compile filter";
+ if (!dfilter_compile(filter, &rfcode, err_str)) {
return FALSE;
}
}
/* This closes the current file if it succeeds. */
if (cf_open(&cfile, fname, WTAP_TYPE_AUTO, FALSE, &err) != CF_OK) {
- *err_str = g_strerror(err);
+ *err_str = g_strdup(g_strerror(err));
if (rfcode != NULL) dfilter_free(rfcode);
return FALSE;
}
@@ -523,7 +522,7 @@ static gboolean funnel_open_file(const char* fname, const char* filter, const ch
case CF_READ_ERROR:
break;
default:
- *err_str = "problem while reading file";
+ *err_str = g_strdup("problem while reading file");
return FALSE;
}
diff --git a/ui/gtk/gui_utils.c b/ui/gtk/gui_utils.c
index 5643f3e1fd..b30cc87246 100644
--- a/ui/gtk/gui_utils.c
+++ b/ui/gtk/gui_utils.c
@@ -535,7 +535,8 @@ pixbuf_to_widget(const guint8 *pb_data) {
*/
void
bad_dfilter_alert_box(GtkWidget *parent,
- const char *dftext)
+ const char *dftext,
+ gchar *err_msg)
{
GtkWidget *msg_dialog;
@@ -544,7 +545,7 @@ bad_dfilter_alert_box(GtkWidget *parent,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_OK,
"The filter expression \"%s\" isn't a valid display filter. (%s)",
- dftext, dfilter_error_msg);
+ dftext, err_msg);
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(msg_dialog),
"See the help for a description of the display filter syntax.");
gtk_dialog_run(GTK_DIALOG(msg_dialog));
diff --git a/ui/gtk/gui_utils.h b/ui/gtk/gui_utils.h
index 9277824ac8..468c862817 100644
--- a/ui/gtk/gui_utils.h
+++ b/ui/gtk/gui_utils.h
@@ -189,13 +189,12 @@ extern void reactivate_window(GtkWidget *win);
/** @} */
/** Alert box for an invalid display filter expression.
- * Assumes "dfilter_error_msg" has been set by "dfilter_compile()" to the
- * error message for the filter.
*
* @param parent parent window from which the display filter came
* @param dftext text of the display filter
+ * @param err_msg text of the error message for the filter
*/
-extern void bad_dfilter_alert_box(GtkWidget *parent, const char *dftext);
+extern void bad_dfilter_alert_box(GtkWidget *parent, const char *dftext, gchar *err_msg);
/** Create a GtkScrolledWindow, set its scrollbar placement appropriately,
* and remember it.
diff --git a/ui/gtk/iax2_analysis.c b/ui/gtk/iax2_analysis.c
index 28efc2eb22..7c18c755d5 100644
--- a/ui/gtk/iax2_analysis.c
+++ b/ui/gtk/iax2_analysis.c
@@ -3703,6 +3703,7 @@ void iax2_analysis_cb(GtkAction *action _U_, gpointer user_data _U_)
gchar filter_text[256];
dfilter_t *sfcode;
+ gchar *err_msg;
capture_file *cf;
frame_data *fdata;
GList *strinfo_list;
@@ -3713,8 +3714,9 @@ void iax2_analysis_cb(GtkAction *action _U_, gpointer user_data _U_)
/* Try to compile the filter. */
g_strlcpy(filter_text,"iax2 && (ip || ipv6)",256);
- if (!dfilter_compile(filter_text, &sfcode)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", dfilter_error_msg);
+ if (!dfilter_compile(filter_text, &sfcode, &err_msg)) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_msg);
+ g_free(err_msg);
return;
}
/* we load the current file into cf variable */
diff --git a/ui/gtk/io_stat.c b/ui/gtk/io_stat.c
index 535211b8aa..d67d35bbd2 100644
--- a/ui/gtk/io_stat.c
+++ b/ui/gtk/io_stat.c
@@ -1784,6 +1784,7 @@ filter_callback(GtkWidget *widget, gpointer user_data)
io_stat_graph_t *gio = (io_stat_graph_t *)user_data;
const char *filter;
dfilter_t *dfilter;
+ gchar *err_msg;
const char *field_name = NULL;
/* this graph is not active, just update display and redraw */
@@ -1813,9 +1814,10 @@ filter_callback(GtkWidget *widget, gpointer user_data)
/* first check if the filter string is valid. */
filter = gtk_entry_get_text(GTK_ENTRY(gio->filter_field));
- if (!dfilter_compile(filter, &dfilter)) {
+ if (!dfilter_compile(filter, &dfilter, &err_msg)) {
bad_dfilter_alert_box(gtk_widget_get_toplevel(widget),
- filter);
+ filter, err_msg);
+ g_free(err_msg);
disable_graph(gio);
io_stat_redraw(gio->io);
return;
diff --git a/ui/gtk/main.c b/ui/gtk/main.c
index f5b6028a98..224491a1f1 100644
--- a/ui/gtk/main.c
+++ b/ui/gtk/main.c
@@ -2163,6 +2163,7 @@ main(int argc, char *argv[])
gint pl_size = 280, tv_size = 95, bv_size = 75;
gchar *rc_file, *cf_name = NULL, *rfilter = NULL, *dfilter = NULL, *jfilter = NULL;
dfilter_t *rfcode = NULL;
+ gchar *err_msg;
gboolean rfilter_parse_failed = FALSE;
e_prefs *prefs_p;
char badopt;
@@ -3082,8 +3083,9 @@ main(int argc, char *argv[])
show_main_window(TRUE);
check_and_warn_user_startup(cf_name);
if (rfilter != NULL) {
- if (!dfilter_compile(rfilter, &rfcode)) {
- bad_dfilter_alert_box(top_level, rfilter);
+ if (!dfilter_compile(rfilter, &rfcode, &err_msg)) {
+ bad_dfilter_alert_box(top_level, rfilter, err_msg);
+ g_free(err_msg);
rfilter_parse_failed = TRUE;
}
}
@@ -3121,8 +3123,9 @@ main(int argc, char *argv[])
cf_goto_frame(&cfile, go_to_packet);
} else if (jfilter != NULL) {
/* try to compile given filter */
- if (!dfilter_compile(jfilter, &jump_to_filter)) {
- bad_dfilter_alert_box(top_level, jfilter);
+ if (!dfilter_compile(jfilter, &jump_to_filter, &err_msg)) {
+ bad_dfilter_alert_box(top_level, jfilter, err_msg);
+ g_free(err_msg);
} else {
/* Filter ok, jump to the first packet matching the filter
conditions. Default search direction is forward, but if
@@ -3859,7 +3862,7 @@ main_fields_changed (void)
if (cfile.dfilter) {
/* Check if filter is still valid */
dfilter_t *dfp = NULL;
- if (!dfilter_compile(cfile.dfilter, &dfp)) {
+ if (!dfilter_compile(cfile.dfilter, &dfp, NULL)) {
/* Not valid. Enable 'Apply' button and remove dfilter. */
g_signal_emit_by_name(G_OBJECT(main_display_filter_widget), "changed");
g_free(cfile.dfilter);
diff --git a/ui/gtk/main_menubar.c b/ui/gtk/main_menubar.c
index fe1d0a3563..a925b4ac75 100644
--- a/ui/gtk/main_menubar.c
+++ b/ui/gtk/main_menubar.c
@@ -271,7 +271,7 @@ goto_conversation_frame(gboolean dir)
return;
}
- if (!dfilter_compile(filter, &dfcode)) {
+ if (!dfilter_compile(filter, &dfcode, NULL)) {
/* The attempt failed; report an error. */
statusbar_push_temporary_msg("Error compiling filter for this conversation.");
g_free(filter);
diff --git a/ui/gtk/rlc_lte_graph.c b/ui/gtk/rlc_lte_graph.c
index 05ad9e03a0..3b0323dcab 100644
--- a/ui/gtk/rlc_lte_graph.c
+++ b/ui/gtk/rlc_lte_graph.c
@@ -892,6 +892,7 @@ static rlc_lte_tap_info *select_rlc_lte_session(capture_file *cf, struct segment
frame_data *fdata;
epan_dissect_t edt;
dfilter_t *sfcode;
+ gchar *err_msg;
GString *error_string;
nstime_t rel_ts;
th_t th = {0, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}};
@@ -903,8 +904,9 @@ static rlc_lte_tap_info *select_rlc_lte_session(capture_file *cf, struct segment
fdata = cf->current_frame;
/* no real filter yet */
- if (!dfilter_compile("rlc-lte", &sfcode)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", dfilter_error_msg);
+ if (!dfilter_compile("rlc-lte", &sfcode, &err_msg)) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_msg);
+ g_free(err_msg);
return NULL;
}
diff --git a/ui/gtk/rtp_analysis.c b/ui/gtk/rtp_analysis.c
index c2446a6649..6feac4a2e0 100644
--- a/ui/gtk/rtp_analysis.c
+++ b/ui/gtk/rtp_analysis.c
@@ -3933,6 +3933,7 @@ rtp_analysis_cb(GtkAction *action _U_, gpointer user_data _U_)
gchar filter_text[256];
dfilter_t *sfcode;
+ gchar *err_msg;
capture_file *cf;
frame_data *fdata;
GList *strinfo_list;
@@ -3943,8 +3944,9 @@ rtp_analysis_cb(GtkAction *action _U_, gpointer user_data _U_)
/* Try to compile the filter. */
g_strlcpy(filter_text, "rtp && rtp.version && rtp.ssrc && (ip || ipv6)", sizeof(filter_text));
- if (!dfilter_compile(filter_text, &sfcode)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", dfilter_error_msg);
+ if (!dfilter_compile(filter_text, &sfcode, &err_msg)) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_msg);
+ g_free(err_msg);
return;
}
/* we load the current file into cf variable */
diff --git a/ui/gtk/sctp_assoc_analyse.c b/ui/gtk/sctp_assoc_analyse.c
index 9b47435c5c..ad914efda3 100644
--- a/ui/gtk/sctp_assoc_analyse.c
+++ b/ui/gtk/sctp_assoc_analyse.c
@@ -973,6 +973,7 @@ sctp_analyse_cb(struct sctp_analyse *u_data, gboolean ext)
{
GList *list;
dfilter_t *sfcode;
+ gchar *err_msg;
capture_file *cf;
epan_dissect_t edt;
gboolean frame_found = FALSE;
@@ -980,8 +981,9 @@ sctp_analyse_cb(struct sctp_analyse *u_data, gboolean ext)
gchar filter_text[256];
g_strlcpy(filter_text, "sctp", 250);
- if (!dfilter_compile(filter_text, &sfcode)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", dfilter_error_msg);
+ if (!dfilter_compile(filter_text, &sfcode, &err_msg)) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_msg);
+ g_free(err_msg);
return;
}
diff --git a/ui/qt/display_filter_edit.cpp b/ui/qt/display_filter_edit.cpp
index 7d80f76697..f6d92a1217 100644
--- a/ui/qt/display_filter_edit.cpp
+++ b/ui/qt/display_filter_edit.cpp
@@ -283,10 +283,8 @@ void DisplayFilterEdit::checkFilter(const QString& text)
}
case Invalid:
{
- QString invalidMsg(tr("Invalid filter"));
- if (dfilter_error_msg) {
- invalidMsg.append(QString().sprintf(": %s", dfilter_error_msg));
- }
+ QString invalidMsg(tr("Invalid filter: "));
+ invalidMsg.append(syntaxErrorMessage());
emit pushFilterSyntaxStatus(invalidMsg);
break;
}
diff --git a/ui/qt/io_graph_dialog.cpp b/ui/qt/io_graph_dialog.cpp
index 5e49bfb493..be4dc2ab18 100644
--- a/ui/qt/io_graph_dialog.cpp
+++ b/ui/qt/io_graph_dialog.cpp
@@ -1555,10 +1555,12 @@ void IOGraph::setFilter(const QString &filter)
if (!full_filter.isEmpty()) {
dfilter_t *dfilter;
bool status;
- status = dfilter_compile(full_filter.toUtf8().constData(), &dfilter);
+ gchar *err_msg;
+ status = dfilter_compile(full_filter.toUtf8().constData(), &dfilter, &err_msg);
dfilter_free(dfilter);
if (!status) {
- config_err_ = dfilter_error_msg;
+ config_err_ = QString::fromUtf8(err_msg);
+ g_free(err_msg);
filter_ = full_filter;
return;
}
diff --git a/ui/qt/main_window.cpp b/ui/qt/main_window.cpp
index 48b418442f..3a5afcc2ba 100644
--- a/ui/qt/main_window.cpp
+++ b/ui/qt/main_window.cpp
@@ -714,15 +714,18 @@ void MainWindow::mergeCaptureFile()
}
if (merge_dlg.merge(file_name)) {
- if (dfilter_compile(display_filter.toUtf8().constData(), &rfcode)) {
+ gchar *err_msg;
+
+ if (dfilter_compile(display_filter.toUtf8().constData(), &rfcode, &err_msg)) {
cf_set_rfcode(capture_file_.capFile(), rfcode);
} else {
/* Not valid. Tell the user, and go back and run the file
selection box again once they dismiss the alert. */
//bad_dfilter_alert_box(top_level, display_filter->str);
QMessageBox::warning(this, tr("Invalid Display Filter"),
- QString(tr("The filter expression %1 isn't a valid display filter. (%2).").arg(display_filter, dfilter_error_msg)),
+ QString(tr("The filter expression %1 isn't a valid display filter. (%2).").arg(display_filter, err_msg)),
QMessageBox::Ok);
+ g_free(err_msg);
continue;
}
} else {
diff --git a/ui/qt/main_window_slots.cpp b/ui/qt/main_window_slots.cpp
index 50aef1b079..d53e9545bd 100644
--- a/ui/qt/main_window_slots.cpp
+++ b/ui/qt/main_window_slots.cpp
@@ -115,6 +115,7 @@ void MainWindow::openCaptureFile(QString& cf_path, QString& read_filter, unsigne
{
QString file_name = "";
dfilter_t *rfcode = NULL;
+ gchar *err_msg;
int err;
gboolean name_param;
@@ -155,7 +156,7 @@ void MainWindow::openCaptureFile(QString& cf_path, QString& read_filter, unsigne
}
}
- if (dfilter_compile(read_filter.toUtf8().constData(), &rfcode)) {
+ if (dfilter_compile(read_filter.toUtf8().constData(), &rfcode, &err_msg)) {
cf_set_rfcode(CaptureFile::globalCapFile(), rfcode);
} else {
/* Not valid. Tell the user, and go back and run the file
@@ -165,7 +166,7 @@ void MainWindow::openCaptureFile(QString& cf_path, QString& read_filter, unsigne
QString("The filter expression ") +
read_filter +
QString(" isn't a valid display filter. (") +
- dfilter_error_msg + QString(")."),
+ err_msg + QString(")."),
QMessageBox::Ok);
if (!name_param) {
@@ -1259,8 +1260,9 @@ void MainWindow::fieldsChanged()
if (CaptureFile::globalCapFile()->dfilter) {
// Check if filter is still valid
dfilter_t *dfp = NULL;
- if (!dfilter_compile(CaptureFile::globalCapFile()->dfilter, &dfp)) {
+ if (!dfilter_compile(CaptureFile::globalCapFile()->dfilter, &dfp, NULL)) {
// TODO: Not valid, enable "Apply" button.
+ // TODO: get an error message and display it?
g_free(CaptureFile::globalCapFile()->dfilter);
CaptureFile::globalCapFile()->dfilter = NULL;
}
diff --git a/ui/qt/search_frame.cpp b/ui/qt/search_frame.cpp
index 68f22d76f9..e07c6221c4 100644
--- a/ui/qt/search_frame.cpp
+++ b/ui/qt/search_frame.cpp
@@ -212,7 +212,7 @@ void SearchFrame::on_findButton_clicked()
switch (sf_ui_->searchTypeComboBox->currentIndex()) {
case df_search:
- if (!dfilter_compile(sf_ui_->searchLineEdit->text().toUtf8().constData(), &dfp)) {
+ if (!dfilter_compile(sf_ui_->searchLineEdit->text().toUtf8().constData(), &dfp, NULL)) {
err_string = tr("Invalid filter.");
emit pushFilterSyntaxStatus(err_string);
return;
diff --git a/ui/qt/syntax_line_edit.cpp b/ui/qt/syntax_line_edit.cpp
index f1edfdbca6..483bdcb7ce 100644
--- a/ui/qt/syntax_line_edit.cpp
+++ b/ui/qt/syntax_line_edit.cpp
@@ -66,6 +66,10 @@ void SyntaxLineEdit::setSyntaxState(SyntaxState state) {
setStyleSheet(style_sheet_);
}
+QString SyntaxLineEdit::syntaxErrorMessage() {
+ return syntax_error_message_;
+}
+
QString SyntaxLineEdit::styleSheet() const {
return style_sheet_;
}
@@ -89,21 +93,23 @@ void SyntaxLineEdit::checkDisplayFilter(QString filter)
deprecated_token_.clear();
dfilter_t *dfp = NULL;
- bool valid = dfilter_compile(filter.toUtf8().constData(), &dfp);
-
- if (valid) {
- setSyntaxState(SyntaxLineEdit::Valid);
- } else {
+ gchar *err_msg;
+ if (dfilter_compile(filter.toUtf8().constData(), &dfp, &err_msg)) {
GPtrArray *depr = NULL;
if (dfp) {
depr = dfilter_deprecated_tokens(dfp);
}
if (depr) {
+ // You keep using that word. I do not think it means what you think it means.
setSyntaxState(SyntaxLineEdit::Deprecated);
deprecated_token_ = (const char *) g_ptr_array_index(depr, 0);
} else {
- setSyntaxState(SyntaxLineEdit::Invalid);
+ setSyntaxState(SyntaxLineEdit::Valid);
}
+ } else {
+ setSyntaxState(SyntaxLineEdit::Invalid);
+ syntax_error_message_ = QString::fromUtf8(err_msg);
+ g_free(err_msg);
}
dfilter_free(dfp);
}
diff --git a/ui/qt/syntax_line_edit.h b/ui/qt/syntax_line_edit.h
index f6872c31f8..77edf92e84 100644
--- a/ui/qt/syntax_line_edit.h
+++ b/ui/qt/syntax_line_edit.h
@@ -35,6 +35,7 @@ public:
SyntaxState syntaxState() const { return syntax_state_; }
void setSyntaxState(SyntaxState state = Empty);
+ QString syntaxErrorMessage();
QString styleSheet() const;
QString deprecatedToken();
@@ -51,6 +52,7 @@ private:
QString style_sheet_;
QString state_style_sheet_;
QString deprecated_token_;
+ QString syntax_error_message_;
signals:
diff --git a/ui/tap-tcp-stream.c b/ui/tap-tcp-stream.c
index 370cdfd76d..c9b952b184 100644
--- a/ui/tap-tcp-stream.c
+++ b/ui/tap-tcp-stream.c
@@ -287,6 +287,7 @@ select_tcpip_session(capture_file *cf, struct segment *hdrs)
frame_data *fdata;
epan_dissect_t edt;
dfilter_t *sfcode;
+ gchar *err_msg;
GString *error_string;
nstime_t rel_ts;
th_t th = {0, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}};
@@ -297,8 +298,9 @@ select_tcpip_session(capture_file *cf, struct segment *hdrs)
fdata = cf->current_frame;
/* no real filter yet */
- if (!dfilter_compile("tcp", &sfcode)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", dfilter_error_msg);
+ if (!dfilter_compile("tcp", &sfcode, &err_msg)) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_msg);
+ g_free(err_msg);
return NULL;
}