aboutsummaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorJoão Valverde <j@v6e.pt>2022-11-19 19:21:19 +0000
committerJoão Valverde <j@v6e.pt>2022-11-28 15:46:44 +0000
commita0d77e93298ab2e62600ec835099691b37fce69b (patch)
treec364f785b543b432a906d9d0779362114026ec2e /ui
parentb4196ab772bd80f0bd95981fa4e70e884bfb8937 (diff)
dfilter: Return an error object instead of string
Return an struct containing error information. This simplifies the interface to more easily provide richer diagnostics in the future. Add an error code besides a human-readable error string to allow checking programmatically for errors in a robust manner. Currently there is only a generic error code, it is expected to increase in the future. Move error location information to the struct. Change callers and implementation to use the new interface.
Diffstat (limited to 'ui')
-rw-r--r--ui/logray/logray_main.cpp7
-rw-r--r--ui/logray/logray_main_window.cpp8
-rw-r--r--ui/logray/logray_main_window_slots.cpp7
-rw-r--r--ui/qt/coloring_rules_dialog.cpp10
-rw-r--r--ui/qt/iax2_analysis_dialog.cpp8
-rw-r--r--ui/qt/io_graph_dialog.cpp8
-rw-r--r--ui/qt/main.cpp7
-rw-r--r--ui/qt/widgets/syntax_line_edit.cpp11
-rw-r--r--ui/qt/wireshark_main_window.cpp16
-rw-r--r--ui/qt/wireshark_main_window_slots.cpp8
-rw-r--r--ui/tap-rlc-graph.c2
-rw-r--r--ui/tap-tcp-stream.c8
12 files changed, 51 insertions, 49 deletions
diff --git a/ui/logray/logray_main.cpp b/ui/logray/logray_main.cpp
index db2a044614..774840593c 100644
--- a/ui/logray/logray_main.cpp
+++ b/ui/logray/logray_main.cpp
@@ -428,6 +428,7 @@ int main(int argc, char *qt_argv[])
#endif
#endif
gchar *err_msg = NULL;
+ df_error_t *df_err = NULL;
QString dfilter, read_filter;
#ifdef HAVE_LIBPCAP
@@ -960,13 +961,13 @@ int main(int argc, char *qt_argv[])
} else if (global_commandline_info.jfilter != NULL) {
dfilter_t *jump_to_filter = NULL;
/* try to compile given filter */
- if (!dfilter_compile(global_commandline_info.jfilter, &jump_to_filter, &err_msg)) {
+ if (!dfilter_compile(global_commandline_info.jfilter, &jump_to_filter, &df_err)) {
// Similar code in MainWindow::mergeCaptureFile().
QMessageBox::warning(main_w, QObject::tr("Invalid Display Filter"),
QObject::tr("The filter expression %1 isn't a valid display filter. (%2).")
- .arg(global_commandline_info.jfilter, err_msg),
+ .arg(global_commandline_info.jfilter, df_err->msg),
QMessageBox::Ok);
- g_free(err_msg);
+ dfilter_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 6c1dd3973a..8151f07b27 100644
--- a/ui/logray/logray_main_window.cpp
+++ b/ui/logray/logray_main_window.cpp
@@ -1164,16 +1164,16 @@ void LograyMainWindow::mergeCaptureFile()
char *tmpname;
if (merge_dlg.merge(file_name, read_filter)) {
- gchar *err_msg;
+ df_error_t *df_err = NULL;
- if (!dfilter_compile(qUtf8Printable(read_filter), &rfcode, &err_msg)) {
+ if (!dfilter_compile(qUtf8Printable(read_filter), &rfcode, &df_err)) {
/* Not valid. Tell the user, and go back and run the file
selection box again once they dismiss the alert. */
// Similar to commandline_info.jfilter section in main().
QMessageBox::warning(this, tr("Invalid Read Filter"),
- QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, err_msg)),
+ QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, df_err->msg)),
QMessageBox::Ok);
- g_free(err_msg);
+ dfilter_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 d8465aca6d..70fd5b003c 100644
--- a/ui/logray/logray_main_window_slots.cpp
+++ b/ui/logray/logray_main_window_slots.cpp
@@ -161,7 +161,7 @@ bool LograyMainWindow::openCaptureFile(QString cf_path, QString read_filter, uns
{
QString file_name = "";
dfilter_t *rfcode = NULL;
- gchar *err_msg;
+ df_error_t *df_err = NULL;
int err;
gboolean name_param;
gboolean ret = true;
@@ -194,7 +194,7 @@ bool LograyMainWindow::openCaptureFile(QString cf_path, QString read_filter, uns
goto finish;
}
- if (dfilter_compile(qUtf8Printable(read_filter), &rfcode, &err_msg)) {
+ if (dfilter_compile(qUtf8Printable(read_filter), &rfcode, &df_err)) {
cf_set_rfcode(CaptureFile::globalCapFile(), rfcode);
} else {
/* Not valid. Tell the user, and go back and run the file
@@ -204,8 +204,9 @@ bool LograyMainWindow::openCaptureFile(QString cf_path, QString read_filter, uns
QString("The filter expression ") +
read_filter +
QString(" isn't a valid display filter. (") +
- err_msg + QString(")."),
+ df_err->msg + QString(")."),
QMessageBox::Ok);
+ dfilter_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 8dc1628dbe..9c446aa1fb 100644
--- a/ui/qt/coloring_rules_dialog.cpp
+++ b/ui/qt/coloring_rules_dialog.cpp
@@ -174,17 +174,17 @@ void ColoringRulesDialog::rowCountChanged()
bool ColoringRulesDialog::isValidFilter(QString filter, QString * error)
{
dfilter_t *dfp = NULL;
- gchar *err_msg;
+ df_error_t *df_err = NULL;
- if (dfilter_compile(filter.toUtf8().constData(), &dfp, &err_msg)) {
+ if (dfilter_compile(filter.toUtf8().constData(), &dfp, &df_err)) {
dfilter_free(dfp);
return true;
}
- if (err_msg)
+ if (df_err)
{
- error->append(err_msg);
- g_free(err_msg);
+ error->append(df_err->msg);
+ dfilter_error_free(df_err);
}
return false;
diff --git a/ui/qt/iax2_analysis_dialog.cpp b/ui/qt/iax2_analysis_dialog.cpp
index 07b9b42e01..29d08c6e69 100644
--- a/ui/qt/iax2_analysis_dialog.cpp
+++ b/ui/qt/iax2_analysis_dialog.cpp
@@ -294,12 +294,12 @@ Iax2AnalysisDialog::Iax2AnalysisDialog(QWidget &parent, CaptureFile &cf) :
const gchar filter_text[] = "iax2 && (ip || ipv6)";
#endif
dfilter_t *sfcode;
- gchar *err_msg;
+ df_error_t *df_err;
/* Try to compile the filter. */
- if (!dfilter_compile(filter_text, &sfcode, &err_msg)) {
- err_str_ = QString(err_msg);
- g_free(err_msg);
+ if (!dfilter_compile(filter_text, &sfcode, &df_err)) {
+ err_str_ = QString(df_err->msg);
+ dfilter_error_free(df_err);
updateWidgets();
return;
}
diff --git a/ui/qt/io_graph_dialog.cpp b/ui/qt/io_graph_dialog.cpp
index da8d94f38d..62482ff093 100644
--- a/ui/qt/io_graph_dialog.cpp
+++ b/ui/qt/io_graph_dialog.cpp
@@ -1660,12 +1660,12 @@ void IOGraph::setFilter(const QString &filter)
if (!full_filter.isEmpty()) {
dfilter_t *dfilter;
bool status;
- gchar *err_msg;
- status = dfilter_compile(full_filter.toUtf8().constData(), &dfilter, &err_msg);
+ df_error_t *df_err = NULL;
+ status = dfilter_compile(full_filter.toUtf8().constData(), &dfilter, &df_err);
dfilter_free(dfilter);
if (!status) {
- config_err_ = QString::fromUtf8(err_msg);
- g_free(err_msg);
+ config_err_ = QString::fromUtf8(df_err->msg);
+ dfilter_error_free(df_err);
filter_ = full_filter;
return;
}
diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp
index b6073d323e..23da6a4083 100644
--- a/ui/qt/main.cpp
+++ b/ui/qt/main.cpp
@@ -451,6 +451,7 @@ int main(int argc, char *qt_argv[])
#endif
#endif
gchar *err_msg = NULL;
+ df_error_t *df_err = NULL;
QString dfilter, read_filter;
#ifdef HAVE_LIBPCAP
@@ -982,13 +983,13 @@ int main(int argc, char *qt_argv[])
} else if (global_commandline_info.jfilter != NULL) {
dfilter_t *jump_to_filter = NULL;
/* try to compile given filter */
- if (!dfilter_compile(global_commandline_info.jfilter, &jump_to_filter, &err_msg)) {
+ if (!dfilter_compile(global_commandline_info.jfilter, &jump_to_filter, &df_err)) {
// Similar code in MainWindow::mergeCaptureFile().
QMessageBox::warning(main_w, QObject::tr("Invalid Display Filter"),
QObject::tr("The filter expression %1 isn't a valid display filter. (%2).")
- .arg(global_commandline_info.jfilter, err_msg),
+ .arg(global_commandline_info.jfilter, df_err->msg),
QMessageBox::Ok);
- g_free(err_msg);
+ dfilter_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/syntax_line_edit.cpp b/ui/qt/widgets/syntax_line_edit.cpp
index d5a3502236..776a7d20c5 100644
--- a/ui/qt/widgets/syntax_line_edit.cpp
+++ b/ui/qt/widgets/syntax_line_edit.cpp
@@ -201,9 +201,8 @@ bool SyntaxLineEdit::checkDisplayFilter(QString filter)
}
dfilter_t *dfp = NULL;
- gchar *err_msg;
- dfilter_loc_t loc;
- if (dfilter_compile2(filter.toUtf8().constData(), &dfp, &err_msg, &loc)) {
+ df_error_t *df_err = NULL;
+ if (dfilter_compile(filter.toUtf8().constData(), &dfp, &df_err)) {
GPtrArray *depr = NULL;
if (dfp) {
depr = dfilter_deprecated_tokens(dfp);
@@ -231,9 +230,9 @@ bool SyntaxLineEdit::checkDisplayFilter(QString filter)
}
} else {
setSyntaxState(SyntaxLineEdit::Invalid);
- syntax_error_message_ = QString::fromUtf8(err_msg);
- syntax_error_message_full_ = createSyntaxErrorMessageFull(filter, syntax_error_message_, loc.col_start, loc.col_len);
- g_free(err_msg);
+ 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);
}
dfilter_free(dfp);
diff --git a/ui/qt/wireshark_main_window.cpp b/ui/qt/wireshark_main_window.cpp
index 76c31ed036..c395bfe6b8 100644
--- a/ui/qt/wireshark_main_window.cpp
+++ b/ui/qt/wireshark_main_window.cpp
@@ -1227,16 +1227,16 @@ void WiresharkMainWindow::mergeCaptureFile()
char *tmpname;
if (merge_dlg.merge(file_name, read_filter)) {
- gchar *err_msg;
+ df_error_t *df_err = NULL;
- if (!dfilter_compile(qUtf8Printable(read_filter), &rfcode, &err_msg)) {
+ if (!dfilter_compile(qUtf8Printable(read_filter), &rfcode, &df_err)) {
/* Not valid. Tell the user, and go back and run the file
selection box again once they dismiss the alert. */
// Similar to commandline_info.jfilter section in main().
QMessageBox::warning(this, tr("Invalid Read Filter"),
- QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, err_msg)),
+ QString(tr("The filter expression %1 isn't a valid read filter. (%2).").arg(read_filter, df_err->msg)),
QMessageBox::Ok);
- g_free(err_msg);
+ dfilter_error_free(df_err);
continue;
}
} else {
@@ -3009,7 +3009,7 @@ QString WiresharkMainWindow::findRtpStreams(QVector<rtpstream_id_t *> *stream_id
bool fwd_id_used, rev_id_used;
const gchar filter_text[] = "rtp && rtp.version == 2 && rtp.ssrc && (ip || ipv6)";
dfilter_t *sfcode;
- gchar *err_msg;
+ df_error_t *df_err = NULL;
/* Try to get the hfid for "rtp.ssrc". */
int hfid_rtp_ssrc = proto_registrar_get_id_byname("rtp.ssrc");
@@ -3018,9 +3018,9 @@ QString WiresharkMainWindow::findRtpStreams(QVector<rtpstream_id_t *> *stream_id
}
/* Try to compile the filter. */
- if (!dfilter_compile(filter_text, &sfcode, &err_msg)) {
- QString err = QString(err_msg);
- g_free(err_msg);
+ if (!dfilter_compile(filter_text, &sfcode, &df_err)) {
+ QString err = QString(df_err->msg);
+ dfilter_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 15d5d12f9c..0a4f8ce0bd 100644
--- a/ui/qt/wireshark_main_window_slots.cpp
+++ b/ui/qt/wireshark_main_window_slots.cpp
@@ -188,7 +188,7 @@ bool WiresharkMainWindow::openCaptureFile(QString cf_path, QString read_filter,
{
QString file_name = "";
dfilter_t *rfcode = NULL;
- gchar *err_msg;
+ df_error_t *df_err = NULL;
int err;
gboolean name_param;
gboolean ret = true;
@@ -221,7 +221,7 @@ bool WiresharkMainWindow::openCaptureFile(QString cf_path, QString read_filter,
goto finish;
}
- if (dfilter_compile(qUtf8Printable(read_filter), &rfcode, &err_msg)) {
+ if (dfilter_compile(qUtf8Printable(read_filter), &rfcode, &df_err)) {
cf_set_rfcode(CaptureFile::globalCapFile(), rfcode);
} else {
/* Not valid. Tell the user, and go back and run the file
@@ -231,9 +231,9 @@ bool WiresharkMainWindow::openCaptureFile(QString cf_path, QString read_filter,
QString("The filter expression ") +
read_filter +
QString(" isn't a valid display filter. (") +
- err_msg + QString(")."),
+ df_err->msg + QString(")."),
QMessageBox::Ok);
-
+ dfilter_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-rlc-graph.c b/ui/tap-rlc-graph.c
index 0bfd9c7390..7147c2d913 100644
--- a/ui/tap-rlc-graph.c
+++ b/ui/tap-rlc-graph.c
@@ -110,7 +110,7 @@ rlc_lte_tap_info *select_rlc_lte_session(capture_file *cf,
}
/* No real filter yet */
- if (!dfilter_compile("rlc-lte", &sfcode, err_msg)) {
+ if (!dfilter_compile("rlc-lte", &sfcode, NULL)) {
return NULL;
}
diff --git a/ui/tap-tcp-stream.c b/ui/tap-tcp-stream.c
index 6afe110173..4440606fed 100644
--- a/ui/tap-tcp-stream.c
+++ b/ui/tap-tcp-stream.c
@@ -256,7 +256,7 @@ select_tcpip_session(capture_file *cf)
epan_dissect_t edt;
dfilter_t *sfcode;
guint32 th_stream;
- gchar *err_msg;
+ df_error_t *df_err;
GString *error_string;
th_t th = {0, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}};
@@ -265,9 +265,9 @@ select_tcpip_session(capture_file *cf)
}
/* no real filter yet */
- if (!dfilter_compile("tcp", &sfcode, &err_msg)) {
- simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", err_msg);
- g_free(err_msg);
+ if (!dfilter_compile("tcp", &sfcode, &df_err)) {
+ simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "%s", df_err->msg);
+ dfilter_error_free(df_err);
return G_MAXUINT32;
}