summaryrefslogtreecommitdiffstats
path: root/epan/expert.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-19 04:14:33 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-19 04:14:33 +0000
commit9f153fbfec0fb9c9ce38e749a7c6f4a5e115d4e9 (patch)
tree2784370cda9bbf2da9114d70f05399c0b229d28c /epan/expert.c
parentAdding debian version 4.2.6-1. (diff)
downloadwireshark-9f153fbfec0fb9c9ce38e749a7c6f4a5e115d4e9.tar.xz
wireshark-9f153fbfec0fb9c9ce38e749a7c6f4a5e115d4e9.zip
Merging upstream version 4.4.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--epan/expert.c108
1 files changed, 58 insertions, 50 deletions
diff --git a/epan/expert.c b/epan/expert.c
index a4ea386e..a5109e1e 100644
--- a/epan/expert.c
+++ b/epan/expert.c
@@ -30,19 +30,19 @@
/* proto_expert cannot be static because it's referenced in the
* print routines
*/
-int proto_expert = -1;
+int proto_expert;
-static int proto_malformed = -1;
+static int proto_malformed;
-static int expert_tap = -1;
-static int highest_severity = 0;
+static int expert_tap;
+static int highest_severity;
-static int ett_expert = -1;
-static int ett_subexpert = -1;
+static int ett_expert;
+static int ett_subexpert;
-static int hf_expert_msg = -1;
-static int hf_expert_group = -1;
-static int hf_expert_severity = -1;
+static int hf_expert_msg;
+static int hf_expert_group;
+static int hf_expert_severity;
struct expert_module
{
@@ -52,17 +52,17 @@ struct expert_module
/* List which stores protocols and expert_info that have been registered */
typedef struct _gpa_expertinfo_t {
- guint32 len;
- guint32 allocated_len;
+ uint32_t len;
+ uint32_t allocated_len;
expert_field_info **ei;
} gpa_expertinfo_t;
static gpa_expertinfo_t gpa_expertinfo;
/* Hash table of abbreviations and IDs */
-static GHashTable *gpa_name_map = NULL;
+static GHashTable *gpa_name_map;
/* Deregistered expert infos */
-static GPtrArray *deregistered_expertinfos = NULL;
+static GPtrArray *deregistered_expertinfos;
const value_string expert_group_vals[] = {
{ PI_CHECKSUM, "Checksum" },
@@ -79,6 +79,9 @@ const value_string expert_group_vals[] = {
{ PI_DECRYPTION, "Decryption" },
{ PI_ASSUMPTION, "Assumption" },
{ PI_DEPRECATED, "Deprecated" },
+ { PI_RECEIVE, "Receive" },
+ { PI_INTERFACE, "Interface" },
+ { PI_DISSECTOR_BUG, "Dissector bug" },
{ 0, NULL }
};
@@ -108,16 +111,16 @@ static expert_field_info *expert_registrar_get_byname(const char *field_name);
typedef struct
{
char *field;
- guint32 severity;
+ uint32_t severity;
} expert_level_entry_t;
-static expert_level_entry_t *uat_expert_entries = NULL;
-static guint expert_level_entry_count = 0;
+static expert_level_entry_t *uat_expert_entries;
+static unsigned expert_level_entry_count;
/* Array of field names currently in UAT */
-static GArray *uat_saved_fields = NULL;
+static GArray *uat_saved_fields;
UAT_CSTRING_CB_DEF(uat_expert_entries, field, expert_level_entry_t)
-UAT_VS_DEF(uat_expert_entries, severity, expert_level_entry_t, guint32, PI_ERROR, "Error")
+UAT_VS_DEF(uat_expert_entries, severity, expert_level_entry_t, uint32_t, PI_ERROR, "Error")
static bool uat_expert_update_cb(void *r, char **err)
{
@@ -125,9 +128,9 @@ static bool uat_expert_update_cb(void *r, char **err)
if (expert_registrar_get_byname(rec->field) == NULL) {
*err = ws_strdup_printf("Expert Info field doesn't exist: %s", rec->field);
- return FALSE;
+ return false;
}
- return TRUE;
+ return true;
}
static void *uat_expert_copy_cb(void *n, const void *o, size_t siz _U_)
@@ -151,7 +154,7 @@ static void uat_expert_free_cb(void*r)
static void uat_expert_post_update_cb(void)
{
- guint i;
+ unsigned i;
expert_field_info *field;
/* Reset any of the previous list of expert info fields to their original severity */
@@ -176,9 +179,9 @@ static void uat_expert_post_update_cb(void)
}
#define EXPERT_REGISTRAR_GET_NTH(eiindex, expinfo) \
- if((guint)eiindex >= gpa_expertinfo.len && wireshark_abort_on_dissector_bug) \
+ if((unsigned)eiindex >= gpa_expertinfo.len && wireshark_abort_on_dissector_bug) \
ws_error("Unregistered expert info! index=%d", eiindex); \
- DISSECTOR_ASSERT_HINT((guint)eiindex < gpa_expertinfo.len, "Unregistered expert info!"); \
+ DISSECTOR_ASSERT_HINT((unsigned)eiindex < gpa_expertinfo.len, "Unregistered expert info!"); \
DISSECTOR_ASSERT_HINT(gpa_expertinfo.ei[eiindex] != NULL, "Unregistered expert info!"); \
expinfo = gpa_expertinfo.ei[eiindex];
@@ -199,7 +202,7 @@ expert_packet_init(void)
{ "Severity level", "_ws.expert.severity", FT_UINT32, BASE_NONE, VALS(expert_severity_vals), 0, "Wireshark expert severity level", HFILL }
}
};
- static gint *ett[] = {
+ static int *ett[] = {
&ett_expert,
&ett_subexpert
};
@@ -211,11 +214,11 @@ expert_packet_init(void)
UAT_END_FIELDS
};
- if (expert_tap == -1) {
+ if (expert_tap == 0) {
expert_tap = register_tap("expert");
}
- if (proto_expert == -1) {
+ if (proto_expert <= 0) {
proto_expert = proto_register_protocol("Expert Info", "Expert", "_ws.expert");
proto_register_field_array(proto_expert, hf, array_length(hf));
proto_register_subtree_array(ett, array_length(ett));
@@ -226,12 +229,12 @@ expert_packet_init(void)
//categorized with other "real" protocols when it comes to
//preferences. Since it's just a UAT, don't bury it in
//with the other protocols
- module_expert->use_gui = FALSE;
+ module_expert->use_gui = false;
expert_uat = uat_new("Expert Info Severity Level Configuration",
sizeof(expert_level_entry_t),
"expert_severity",
- TRUE,
+ true,
(void **)&uat_expert_entries,
&expert_level_entry_count,
UAT_AFFECTS_DISSECTION,
@@ -263,7 +266,7 @@ expert_init(void)
gpa_expertinfo.allocated_len = 0;
gpa_expertinfo.ei = NULL;
gpa_name_map = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL);
- uat_saved_fields = g_array_new(FALSE, FALSE, sizeof(expert_field_info*));
+ uat_saved_fields = g_array_new(false, false, sizeof(expert_field_info*));
deregistered_expertinfos = g_ptr_array_new();
}
@@ -290,12 +293,12 @@ expert_cleanup(void)
/* Free the UAT saved fields */
if (uat_saved_fields) {
- g_array_free(uat_saved_fields, TRUE);
+ g_array_free(uat_saved_fields, true);
uat_saved_fields = NULL;
}
if (deregistered_expertinfos) {
- g_ptr_array_free(deregistered_expertinfos, TRUE);
+ g_ptr_array_free(deregistered_expertinfos, true);
deregistered_expertinfos = NULL;
}
}
@@ -308,7 +311,7 @@ expert_get_highest_severity(void)
}
void
-expert_update_comment_count(guint64 count)
+expert_update_comment_count(uint64_t count)
{
if (count==0 && highest_severity==PI_COMMENT)
highest_severity = 0;
@@ -345,7 +348,7 @@ expert_deregister_protocol (expert_module_t *module)
}
static void
-free_deregistered_expertinfo (gpointer data, gpointer user_data _U_)
+free_deregistered_expertinfo (void *data, void *user_data _U_)
{
expert_field_info *expinfo = (expert_field_info *) data;
gpa_expertinfo.ei[expinfo->id] = NULL; /* Invalidate this id */
@@ -355,7 +358,7 @@ void
expert_free_deregistered_expertinfos (void)
{
g_ptr_array_foreach(deregistered_expertinfos, free_deregistered_expertinfo, NULL);
- g_ptr_array_free(deregistered_expertinfos, TRUE);
+ g_ptr_array_free(deregistered_expertinfos, true);
deregistered_expertinfos = g_ptr_array_new();
}
@@ -378,6 +381,9 @@ expert_register_field_init(expert_field_info *expinfo, expert_module_t *module)
case PI_DECRYPTION:
case PI_ASSUMPTION:
case PI_DEPRECATED:
+ case PI_RECEIVE:
+ case PI_INTERFACE:
+ case PI_DISSECTOR_BUG:
break;
default:
REPORT_DISSECTOR_BUG("Expert info for %s has invalid group=0x%08x\n", expinfo->name, expinfo->group);
@@ -413,7 +419,7 @@ expert_register_field_init(expert_field_info *expinfo, expert_module_t *module)
expinfo->orig_severity = expinfo->severity;
/* save field name for lookup */
- g_hash_table_insert(gpa_name_map, (gpointer) (expinfo->name), expinfo);
+ g_hash_table_insert(gpa_name_map, (void *) (expinfo->name), expinfo);
return expinfo->id;
}
@@ -477,7 +483,7 @@ expert_registrar_get_byname(const char *field_name)
* This is intended for use in expert_add_info_format or proto_tree_add_expert_format
* to get the "base" string to then append additional information
*/
-const gchar* expert_get_summary(expert_field *eiindex)
+const char* expert_get_summary(expert_field *eiindex)
{
expert_field_info *eiinfo;
@@ -496,7 +502,8 @@ const gchar* expert_get_summary(expert_field *eiindex)
/* set's the PI_ flags to a protocol item
* (and its parent items till the toplevel) */
static void
-expert_set_item_flags(proto_item *pi, const int group, const guint severity)
+// NOLINTNEXTLINE(misc-no-recursion)
+expert_set_item_flags(proto_item *pi, const int group, const unsigned severity)
{
if (pi != NULL && PITEM_FINFO(pi) != NULL && (severity >= FI_GET_FLAG(PITEM_FINFO(pi), PI_SEVERITY_MASK))) {
FI_REPLACE_FLAGS(PITEM_FINFO(pi), PI_GROUP_MASK, group);
@@ -504,6 +511,7 @@ expert_set_item_flags(proto_item *pi, const int group, const guint severity)
/* propagate till toplevel item */
pi = proto_item_get_parent(pi);
+ // We recurse here, but we're limited by our tree depth checks in proto.c
expert_set_item_flags(pi, group, severity);
}
}
@@ -531,7 +539,7 @@ expert_create_tree(proto_item *pi, int group, int severity, const char *msg)
}
static proto_tree*
-expert_set_info_vformat(packet_info *pinfo, proto_item *pi, int group, int severity, int hf_index, gboolean use_vaformat,
+expert_set_info_vformat(packet_info *pinfo, proto_item *pi, int group, int severity, int hf_index, bool use_vaformat,
const char *format, va_list ap)
{
char formatted[ITEM_LABEL_LENGTH];
@@ -560,7 +568,7 @@ expert_set_info_vformat(packet_info *pinfo, proto_item *pi, int group, int sever
}
if ((pi == NULL) || (PITEM_FINFO(pi) == NULL) ||
- ((guint)severity >= FI_GET_FLAG(PITEM_FINFO(pi), PI_SEVERITY_MASK))) {
+ ((unsigned)severity >= FI_GET_FLAG(PITEM_FINFO(pi), PI_SEVERITY_MASK))) {
col_add_str(pinfo->cinfo, COL_EXPERT, val_to_str(severity, expert_severity_vals, "Unknown (%u)"));
}
@@ -574,13 +582,13 @@ expert_set_info_vformat(packet_info *pinfo, proto_item *pi, int group, int sever
* to write.
*/
if (pos >= ITEM_LABEL_LENGTH) {
- /* Truncation occured. It might have split a UTF-8 character. */
+ /* Truncation occurred. It might have split a UTF-8 character. */
ws_utf8_truncate(formatted, ITEM_LABEL_LENGTH - 1);
}
tree = expert_create_tree(pi, group, severity, formatted);
- if (hf_index == -1) {
+ if (hf_index <= 0) {
/* If no filterable expert info, just add the message */
ti = proto_tree_add_string(tree, hf_expert_msg, NULL, 0, 0, formatted);
proto_item_set_generated(ti);
@@ -640,7 +648,7 @@ expert_add_info_internal(packet_info *pinfo, proto_item *pi, expert_field *expin
EXPERT_REGISTRAR_GET_NTH(expindex->ei, eiinfo);
va_start(unused, expindex);
- tree = expert_set_info_vformat(pinfo, pi, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, FALSE, eiinfo->summary, unused);
+ tree = expert_set_info_vformat(pinfo, pi, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, false, eiinfo->summary, unused);
va_end(unused);
return tree;
}
@@ -664,7 +672,7 @@ expert_add_info_format(packet_info *pinfo, proto_item *pi, expert_field *expinde
EXPERT_REGISTRAR_GET_NTH(expindex->ei, eiinfo);
va_start(ap, format);
- tree = expert_set_info_vformat(pinfo, pi, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, TRUE, format, ap);
+ tree = expert_set_info_vformat(pinfo, pi, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, true, format, ap);
va_end(ap);
return (proto_item *)tree;
}
@@ -672,11 +680,11 @@ expert_add_info_format(packet_info *pinfo, proto_item *pi, expert_field *expinde
/* Helper function for expert_add_expert() to work around compiler's special needs on ARM */
static inline proto_item *
proto_tree_add_expert_internal(proto_tree *tree, packet_info *pinfo, expert_field *expindex,
- tvbuff_t *tvb, gint start, gint length, ...)
+ tvbuff_t *tvb, int start, int length, ...)
{
expert_field_info *eiinfo;
proto_item *ti;
- gint item_length, captured_length;
+ int item_length, captured_length;
va_list unused;
/* Look up the item */
@@ -691,7 +699,7 @@ proto_tree_add_expert_internal(proto_tree *tree, packet_info *pinfo, expert_fiel
item_length = captured_length;
ti = proto_tree_add_text_internal(tree, tvb, start, item_length, "%s", eiinfo->summary);
va_start(unused, length);
- expert_set_info_vformat(pinfo, ti, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, FALSE, eiinfo->summary, unused);
+ expert_set_info_vformat(pinfo, ti, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, false, eiinfo->summary, unused);
va_end(unused);
/* But make sure it throws an exception *after* adding the item */
@@ -703,18 +711,18 @@ proto_tree_add_expert_internal(proto_tree *tree, packet_info *pinfo, expert_fiel
proto_item *
proto_tree_add_expert(proto_tree *tree, packet_info *pinfo, expert_field *expindex,
- tvbuff_t *tvb, gint start, gint length)
+ tvbuff_t *tvb, int start, int length)
{
return proto_tree_add_expert_internal(tree, pinfo, expindex, tvb, start, length);
}
proto_item *
proto_tree_add_expert_format(proto_tree *tree, packet_info *pinfo, expert_field *expindex,
- tvbuff_t *tvb, gint start, gint length, const char *format, ...)
+ tvbuff_t *tvb, int start, int length, const char *format, ...)
{
va_list ap;
expert_field_info *eiinfo;
- gint item_length, captured_length;
+ int item_length, captured_length;
proto_item *ti;
/* Look up the item */
@@ -732,7 +740,7 @@ proto_tree_add_expert_format(proto_tree *tree, packet_info *pinfo, expert_field
va_end(ap);
va_start(ap, format);
- expert_set_info_vformat(pinfo, ti, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, TRUE, format, ap);
+ expert_set_info_vformat(pinfo, ti, eiinfo->group, eiinfo->severity, *eiinfo->hf_info.p_id, true, format, ap);
va_end(ap);
/* But make sure it throws an exception *after* adding the item */