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.
This commit is contained in:
Evan Huus 2021-09-07 14:33:39 -04:00 committed by Wireshark GitLab Utility
parent 530ee0b365
commit 6caf24e966
8 changed files with 44 additions and 43 deletions

View File

@ -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

View File

@ -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 ---------------------------------------------------------------

View File

@ -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);

View File

@ -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");

View File

@ -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);

View File

@ -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");

View File

@ -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;

View File

@ -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);