aboutsummaryrefslogtreecommitdiffstats
path: root/ui/qt/rpc_service_response_time_dialog.cpp
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2017-12-22 15:50:16 -0500
committerMichael Mann <mmann78@netscape.net>2017-12-23 01:08:31 +0000
commit54f6df525e57513398e348b76cd7395e6a4b1298 (patch)
treef5800f79667cffff55660897161ef3720c51d6b6 /ui/qt/rpc_service_response_time_dialog.cpp
parent56cca5bd58a308d65e8d2a759bb02b040f5afc7e (diff)
RPC Service Response Time dialog: Fix crash
There were a few use-after-free situations. Fix one by using epan API to get program name for tap structure. tap structure shouldn't be deleted because it's needed. Will be freed by the tap reset/free function. Change-Id: Ia18d84340362839926036c777106ca1c6d1b18f5 Ping-Bug: 14141 Reviewed-on: https://code.wireshark.org/review/24950 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'ui/qt/rpc_service_response_time_dialog.cpp')
-rw-r--r--ui/qt/rpc_service_response_time_dialog.cpp7
1 files changed, 2 insertions, 5 deletions
diff --git a/ui/qt/rpc_service_response_time_dialog.cpp b/ui/qt/rpc_service_response_time_dialog.cpp
index 2c33351af7..f47d80a8c1 100644
--- a/ui/qt/rpc_service_response_time_dialog.cpp
+++ b/ui/qt/rpc_service_response_time_dialog.cpp
@@ -386,7 +386,6 @@ void RpcServiceResponseTimeDialog::fillTree()
{
void *tap_data = NULL;
const QString program_name = program_combo_->currentText();
- gchar *program_name_cptr = qstring_strdup(program_name);
guint32 max_procs = 0;
switch (dlg_type_) {
@@ -397,8 +396,8 @@ void RpcServiceResponseTimeDialog::fillTree()
guid_key *dkey = dce_name_to_uuid_key_[program_name];
dcerpcstat_tap_data_t *dtap_data = g_new0(dcerpcstat_tap_data_t, 1);
dtap_data->uuid = dkey->guid;
- dtap_data->prog = program_name_cptr;
dtap_data->ver = (guint16) version_combo_->itemData(version_combo_->currentIndex()).toUInt();
+ dtap_data->prog = dcerpc_get_proto_name(&dtap_data->uuid, dtap_data->ver);
dcerpc_sub_dissector *procs = dcerpc_get_proto_sub_dissector(&(dkey->guid), dtap_data->ver);
for (int i = 0; procs[i].name; i++) {
@@ -414,8 +413,8 @@ void RpcServiceResponseTimeDialog::fillTree()
if (!onc_name_to_program_.contains(program_name)) return;
rpcstat_tap_data_t *otap_data = g_new0(rpcstat_tap_data_t, 1);
- otap_data->prog = program_name_cptr;
otap_data->program = onc_name_to_program_[program_name];
+ otap_data->prog = rpc_prog_name(otap_data->program);
otap_data->version = (guint32) version_combo_->itemData(version_combo_->currentIndex()).toUInt();
onc_rpc_num_procedures_ = -1;
@@ -431,8 +430,6 @@ void RpcServiceResponseTimeDialog::fillTree()
set_srt_table_param_data(srt_, tap_data);
ServiceResponseTimeDialog::fillTree();
- g_free(program_name_cptr);
- g_free(tap_data);
}
/*