diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/capture.c | 2 | ||||
-rw-r--r-- | ui/gtk/capture_file_dlg.c | 12 | ||||
-rw-r--r-- | ui/gtk/color_edit_dlg.c | 6 | ||||
-rw-r--r-- | ui/gtk/dfilter_expr_dlg.c | 23 | ||||
-rw-r--r-- | ui/gtk/filter_dlg.c | 56 | ||||
-rw-r--r-- | ui/gtk/find_dlg.c | 9 | ||||
-rw-r--r-- | ui/gtk/funnel_stat.c | 13 | ||||
-rw-r--r-- | ui/gtk/gui_utils.c | 5 | ||||
-rw-r--r-- | ui/gtk/gui_utils.h | 5 | ||||
-rw-r--r-- | ui/gtk/iax2_analysis.c | 6 | ||||
-rw-r--r-- | ui/gtk/io_stat.c | 6 | ||||
-rw-r--r-- | ui/gtk/main.c | 13 | ||||
-rw-r--r-- | ui/gtk/main_menubar.c | 2 | ||||
-rw-r--r-- | ui/gtk/rlc_lte_graph.c | 6 | ||||
-rw-r--r-- | ui/gtk/rtp_analysis.c | 6 | ||||
-rw-r--r-- | ui/gtk/sctp_assoc_analyse.c | 6 | ||||
-rw-r--r-- | ui/qt/display_filter_edit.cpp | 6 | ||||
-rw-r--r-- | ui/qt/io_graph_dialog.cpp | 6 | ||||
-rw-r--r-- | ui/qt/main_window.cpp | 7 | ||||
-rw-r--r-- | ui/qt/main_window_slots.cpp | 8 | ||||
-rw-r--r-- | ui/qt/search_frame.cpp | 2 | ||||
-rw-r--r-- | ui/qt/syntax_line_edit.cpp | 18 | ||||
-rw-r--r-- | ui/qt/syntax_line_edit.h | 2 | ||||
-rw-r--r-- | ui/tap-tcp-stream.c | 6 |
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; } |