aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2021-09-07 14:33:39 -0400
committerWireshark GitLab Utility <gerald+gitlab-utility@wireshark.org>2021-09-08 01:37:07 +0000
commit6caf24e96612b738c7320876c91c1a6c2ef51c1a (patch)
treee65411f9ad9f22ec57a9f41d0da7a62a9311cfdc
parent530ee0b365cbe8161dcea2904bc6420834dba155 (diff)
tvblist: explicitly scope memory
Allocate the root node in the same pool as the list itself, and make that pool explicit so we can pass the pinfo scope instead of using the global packet pool.
-rw-r--r--debian/libwireshark0.symbols2
-rw-r--r--epan/dissectors/asn1/h225/h225.cnf6
-rw-r--r--epan/dissectors/asn1/h225/packet-h225-template.c18
-rw-r--r--epan/dissectors/asn1/snmp/packet-snmp-template.c10
-rw-r--r--epan/dissectors/packet-h225.c24
-rw-r--r--epan/dissectors/packet-snmp.c10
-rw-r--r--epan/next_tvb.c14
-rw-r--r--epan/next_tvb.h3
8 files changed, 44 insertions, 43 deletions
diff --git a/debian/libwireshark0.symbols b/debian/libwireshark0.symbols
index be43b8cc17..b5a2d1ee48 100644
--- a/debian/libwireshark0.symbols
+++ b/debian/libwireshark0.symbols
@@ -964,7 +964,7 @@ libwireshark.so.0 libwireshark0 #MINVER#
next_tvb_add_string@Base 1.9.1
next_tvb_add_uint@Base 1.9.1
next_tvb_call@Base 1.9.1
- next_tvb_init@Base 1.9.1
+ next_tvb_list_new@Base 3.5.0
nmas_subverb_enum@Base 2.1.0
nt_cmd_vals_ext@Base 1.9.1
num_tree_types@Base 1.9.1
diff --git a/epan/dissectors/asn1/h225/h225.cnf b/epan/dissectors/asn1/h225/h225.cnf
index 024975a3b6..a4a5c80b9d 100644
--- a/epan/dissectors/asn1/h225/h225.cnf
+++ b/epan/dissectors/asn1/h225/h225.cnf
@@ -385,14 +385,14 @@ IsupNumber/nationalStandardPartyNumber isupNationalStandardPartyNumber
tvbuff_t *h245_tvb = NULL;
%(DEFAULT_BODY)s
- next_tvb_add_handle(&h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle);
+ next_tvb_add_handle(h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle);
#.END
#----------------------------------------------------------------------------------------
#.FN_BODY H245Control/_item VAL_PTR = &h245_tvb
tvbuff_t *h245_tvb = NULL;
%(DEFAULT_BODY)s
- next_tvb_add_handle(&h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle);
+ next_tvb_add_handle(h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle);
#.END
#----------------------------------------------------------------------------------------
#.FN_HDR H323-UU-PDU/h323-message-body/empty
@@ -792,7 +792,7 @@ IsupNumber/nationalStandardPartyNumber isupNationalStandardPartyNumber
tvbuff_t *next_tvb = NULL;
%(DEFAULT_BODY)s
- next_tvb_add_handle(&tp_list, next_tvb, (h225_tp_in_tree)?tree:NULL, tp_handle);
+ next_tvb_add_handle(tp_list, next_tvb, (h225_tp_in_tree)?tree:NULL, tp_handle);
#.END
#--- NonStandardParameter ---------------------------------------------------------------
diff --git a/epan/dissectors/asn1/h225/packet-h225-template.c b/epan/dissectors/asn1/h225/packet-h225-template.c
index 208e6dafca..01c77ec2f8 100644
--- a/epan/dissectors/asn1/h225/packet-h225-template.c
+++ b/epan/dissectors/asn1/h225/packet-h225-template.c
@@ -99,8 +99,8 @@ static dissector_handle_t h4501_handle=NULL;
static dissector_handle_t nsp_handle;
static dissector_handle_t tp_handle;
-static next_tvb_list_t h245_list;
-static next_tvb_list_t tp_list;
+static next_tvb_list_t *h245_list;
+static next_tvb_list_t *tp_list;
/* Initialize the protocol and registered fields */
static int h225_tap = -1;
@@ -322,8 +322,8 @@ static void
h225_frame_end(void)
{
/* next_tvb pointers are allocated in packet scope, clear it. */
- next_tvb_init(&h245_list);
- next_tvb_init(&tp_list);
+ h245_list = NULL;
+ tp_list = NULL;
}
static int
@@ -340,8 +340,8 @@ dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
p_add_proto_data(pinfo->pool, pinfo, proto_h225, 0, h225_pi);
register_frame_end_routine(pinfo, h225_frame_end);
- next_tvb_init(&h245_list);
- next_tvb_init(&tp_list);
+ h245_list = next_tvb_list_new(pinfo->pool);
+ tp_list = next_tvb_list_new(pinfo->pool);
col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME);
col_clear(pinfo->cinfo, COL_INFO);
@@ -351,13 +351,13 @@ dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
offset = dissect_H323_UserInformation_PDU(tvb, pinfo, tr, NULL);
- if (h245_list.count){
+ if (h245_list->count){
col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
col_set_fence(pinfo->cinfo, COL_PROTOCOL);
}
- next_tvb_call(&h245_list, pinfo, tree, h245dg_handle, data_handle);
- next_tvb_call(&tp_list, pinfo, tree, NULL, data_handle);
+ next_tvb_call(h245_list, pinfo, tree, h245dg_handle, data_handle);
+ next_tvb_call(tp_list, pinfo, tree, NULL, data_handle);
tap_queue_packet(h225_tap, pinfo, h225_pi);
diff --git a/epan/dissectors/asn1/snmp/packet-snmp-template.c b/epan/dissectors/asn1/snmp/packet-snmp-template.c
index d0df6b3c0a..dd47331c85 100644
--- a/epan/dissectors/asn1/snmp/packet-snmp-template.c
+++ b/epan/dissectors/asn1/snmp/packet-snmp-template.c
@@ -184,7 +184,7 @@ tvbuff_t *value_tvb=NULL;
static dissector_handle_t snmp_handle;
static dissector_handle_t data_handle;
-static next_tvb_list_t var_list;
+static next_tvb_list_t *var_list;
static int hf_snmp_response_in = -1;
static int hf_snmp_response_to = -1;
@@ -1134,7 +1134,7 @@ already_added:
if (value_len > 0 && oid_string) {
tvbuff_t* sub_tvb = tvb_new_subset_length(tvb, value_offset, value_len);
- next_tvb_add_string(&var_list, sub_tvb, (snmp_var_in_tree) ? pt_value : NULL, value_sub_dissectors_table, oid_string);
+ next_tvb_add_string(var_list, sub_tvb, (snmp_var_in_tree) ? pt_value : NULL, value_sub_dissectors_table, oid_string);
}
@@ -2071,7 +2071,7 @@ dissect_snmp_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
}
- next_tvb_init(&var_list);
+ var_list = next_tvb_list_new(pinfo->pool);
col_set_str(pinfo->cinfo, COL_PROTOCOL, proto_get_protocol_short_name(find_protocol_by_id(proto)));
@@ -2108,7 +2108,7 @@ dissect_snmp_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo,
next_tvb = tvb_new_subset_remaining(tvb, offset);
call_dissector(data_handle, next_tvb, pinfo, tree);
} else {
- next_tvb_call(&var_list, pinfo, tree, NULL, data_handle);
+ next_tvb_call(var_list, pinfo, tree, NULL, data_handle);
}
return offset;
@@ -2210,7 +2210,7 @@ dissect_smux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
proto_tree *smux_tree = NULL;
proto_item *item = NULL;
- next_tvb_init(&var_list);
+ var_list = next_tvb_list_new(pinfo->pool);
col_set_str(pinfo->cinfo, COL_PROTOCOL, "SMUX");
diff --git a/epan/dissectors/packet-h225.c b/epan/dissectors/packet-h225.c
index 4f3558f48c..53af64a257 100644
--- a/epan/dissectors/packet-h225.c
+++ b/epan/dissectors/packet-h225.c
@@ -107,8 +107,8 @@ static dissector_handle_t h4501_handle=NULL;
static dissector_handle_t nsp_handle;
static dissector_handle_t tp_handle;
-static next_tvb_list_t h245_list;
-static next_tvb_list_t tp_list;
+static next_tvb_list_t *h245_list;
+static next_tvb_list_t *tp_list;
/* Initialize the protocol and registered fields */
static int h225_tap = -1;
@@ -4131,7 +4131,7 @@ dissect_h225_ParallelH245Control_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ct
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, FALSE, &h245_tvb);
- next_tvb_add_handle(&h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle);
+ next_tvb_add_handle(h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle);
return offset;
@@ -5057,7 +5057,7 @@ dissect_h225_H245Control_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, FALSE, &h245_tvb);
- next_tvb_add_handle(&h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle);
+ next_tvb_add_handle(h245_list, h245_tvb, (h225_h245_in_tree)?tree:NULL, h245dg_handle);
return offset;
@@ -5114,7 +5114,7 @@ dissect_h225_T_messageContent_item(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, FALSE, &next_tvb);
- next_tvb_add_handle(&tp_list, next_tvb, (h225_tp_in_tree)?tree:NULL, tp_handle);
+ next_tvb_add_handle(tp_list, next_tvb, (h225_tp_in_tree)?tree:NULL, tp_handle);
return offset;
@@ -7903,8 +7903,8 @@ static void
h225_frame_end(void)
{
/* next_tvb pointers are allocated in packet scope, clear it. */
- next_tvb_init(&h245_list);
- next_tvb_init(&tp_list);
+ h245_list = NULL;
+ tp_list = NULL;
}
static int
@@ -7921,8 +7921,8 @@ dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
p_add_proto_data(pinfo->pool, pinfo, proto_h225, 0, h225_pi);
register_frame_end_routine(pinfo, h225_frame_end);
- next_tvb_init(&h245_list);
- next_tvb_init(&tp_list);
+ h245_list = next_tvb_list_new(pinfo->pool);
+ tp_list = next_tvb_list_new(pinfo->pool);
col_set_str(pinfo->cinfo, COL_PROTOCOL, PSNAME);
col_clear(pinfo->cinfo, COL_INFO);
@@ -7932,13 +7932,13 @@ dissect_h225_H323UserInformation(tvbuff_t *tvb, packet_info *pinfo, proto_tree *
offset = dissect_H323_UserInformation_PDU(tvb, pinfo, tr, NULL);
- if (h245_list.count){
+ if (h245_list->count){
col_append_str(pinfo->cinfo, COL_PROTOCOL, "/");
col_set_fence(pinfo->cinfo, COL_PROTOCOL);
}
- next_tvb_call(&h245_list, pinfo, tree, h245dg_handle, data_handle);
- next_tvb_call(&tp_list, pinfo, tree, NULL, data_handle);
+ next_tvb_call(h245_list, pinfo, tree, h245dg_handle, data_handle);
+ next_tvb_call(tp_list, pinfo, tree, NULL, data_handle);
tap_queue_packet(h225_tap, pinfo, h225_pi);
diff --git a/epan/dissectors/packet-snmp.c b/epan/dissectors/packet-snmp.c
index 8f0af78af3..2f0bc657c9 100644
--- a/epan/dissectors/packet-snmp.c
+++ b/epan/dissectors/packet-snmp.c
@@ -192,7 +192,7 @@ tvbuff_t *value_tvb=NULL;
static dissector_handle_t snmp_handle;
static dissector_handle_t data_handle;
-static next_tvb_list_t var_list;
+static next_tvb_list_t *var_list;
static int hf_snmp_response_in = -1;
static int hf_snmp_response_to = -1;
@@ -1236,7 +1236,7 @@ already_added:
if (value_len > 0 && oid_string) {
tvbuff_t* sub_tvb = tvb_new_subset_length(tvb, value_offset, value_len);
- next_tvb_add_string(&var_list, sub_tvb, (snmp_var_in_tree) ? pt_value : NULL, value_sub_dissectors_table, oid_string);
+ next_tvb_add_string(var_list, sub_tvb, (snmp_var_in_tree) ? pt_value : NULL, value_sub_dissectors_table, oid_string);
}
@@ -3311,7 +3311,7 @@ dissect_snmp_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
}
- next_tvb_init(&var_list);
+ var_list = next_tvb_list_new(pinfo->pool);
col_set_str(pinfo->cinfo, COL_PROTOCOL, proto_get_protocol_short_name(find_protocol_by_id(proto)));
@@ -3348,7 +3348,7 @@ dissect_snmp_pdu(tvbuff_t *tvb, int offset, packet_info *pinfo,
next_tvb = tvb_new_subset_remaining(tvb, offset);
call_dissector(data_handle, next_tvb, pinfo, tree);
} else {
- next_tvb_call(&var_list, pinfo, tree, NULL, data_handle);
+ next_tvb_call(var_list, pinfo, tree, NULL, data_handle);
}
return offset;
@@ -3450,7 +3450,7 @@ dissect_smux(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
proto_tree *smux_tree = NULL;
proto_item *item = NULL;
- next_tvb_init(&var_list);
+ var_list = next_tvb_list_new(pinfo->pool);
col_set_str(pinfo->cinfo, COL_PROTOCOL, "SMUX");
diff --git a/epan/next_tvb.c b/epan/next_tvb.c
index 113677409a..d0f24ab32a 100644
--- a/epan/next_tvb.c
+++ b/epan/next_tvb.c
@@ -16,16 +16,16 @@
#include "next_tvb.h"
-void next_tvb_init(next_tvb_list_t *list) {
- list->first = NULL;
- list->last = NULL;
- list->count = 0;
+next_tvb_list_t* next_tvb_list_new(wmem_allocator_t *pool) {
+ next_tvb_list_t *list = wmem_new0(pool, next_tvb_list_t);
+ list->pool = pool;
+ return list;
}
void next_tvb_add_handle(next_tvb_list_t *list, tvbuff_t *tvb, proto_tree *tree, dissector_handle_t handle) {
next_tvb_item_t *item;
- item = wmem_new(wmem_packet_scope(), next_tvb_item_t);
+ item = wmem_new(list->pool, next_tvb_item_t);
item->type = NTVB_HANDLE;
item->handle = handle;
@@ -46,7 +46,7 @@ void next_tvb_add_handle(next_tvb_list_t *list, tvbuff_t *tvb, proto_tree *tree,
void next_tvb_add_uint(next_tvb_list_t *list, tvbuff_t *tvb, proto_tree *tree, dissector_table_t table, guint32 uint_val) {
next_tvb_item_t *item;
- item = wmem_new(wmem_packet_scope(), next_tvb_item_t);
+ item = wmem_new(list->pool, next_tvb_item_t);
item->type = NTVB_UINT;
item->table = table;
@@ -68,7 +68,7 @@ void next_tvb_add_uint(next_tvb_list_t *list, tvbuff_t *tvb, proto_tree *tree, d
void next_tvb_add_string(next_tvb_list_t *list, tvbuff_t *tvb, proto_tree *tree, dissector_table_t table, const gchar *string) {
next_tvb_item_t *item;
- item = wmem_new(wmem_packet_scope(), next_tvb_item_t);
+ item = wmem_new(list->pool, next_tvb_item_t);
item->type = NTVB_STRING;
item->table = table;
diff --git a/epan/next_tvb.h b/epan/next_tvb.h
index f3333cf4c8..fe66e3fed7 100644
--- a/epan/next_tvb.h
+++ b/epan/next_tvb.h
@@ -44,10 +44,11 @@ typedef struct next_tvb_item {
typedef struct {
next_tvb_item_t *first;
next_tvb_item_t *last;
+ wmem_allocator_t *pool;
int count;
} next_tvb_list_t;
-WS_DLL_PUBLIC void next_tvb_init(next_tvb_list_t *list);
+WS_DLL_PUBLIC next_tvb_list_t* next_tvb_list_new(wmem_allocator_t *pool);
WS_DLL_PUBLIC void next_tvb_add_handle(next_tvb_list_t *list, tvbuff_t *tvb, proto_tree *tree, dissector_handle_t handle);
WS_DLL_PUBLIC void next_tvb_add_uint(next_tvb_list_t *list, tvbuff_t *tvb, proto_tree *tree, dissector_table_t table, guint32 uint_val);
WS_DLL_PUBLIC void next_tvb_add_string(next_tvb_list_t *list, tvbuff_t *tvb, proto_tree *tree, dissector_table_t table, const gchar *string);