diff options
author | Hadriel Kaplan <hadrielk@yahoo.com> | 2014-04-02 02:07:16 -0400 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2014-04-03 04:40:20 +0000 |
commit | 04c05a21e34cec326f1aff2f5f8a6e74e1ced984 (patch) | |
tree | 6db27e328578c12b6c1c4841a708e12eec0f4c24 /ui | |
parent | df80f3133cc3b128ea989ad6830511c378fa0b63 (diff) |
Fix Bug 9920 Buildbot crash due to SDP/RTP mismatch
For details see comments in Bug 9920.
The executive summary:
Bug 9920 is a crash caused by a couple of issues:
1) The memory ownership model for the rtp_dyn_payload hashtable is split: SDP
creates the rtp_dyn_payload hashtable, but RTP can free it. Since there isn't
*one* pointer to the hashtable, RTP freeing it means SDP has a dangling
pointer.
2) Either the SDP dissector shouldn't be creating two separate, unique
hashtables for multiple media channels of the same addr:port, or RTP shouldn't
be free'ing the previous one.
Change-Id: I436e67de6882f84aa82dcbdfe60bf313fe4fd99c
Reviewed-on: https://code.wireshark.org/review/918
Reviewed-by: Hadriel Kaplan <hadrielk@yahoo.com>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gtk/voip_calls.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/ui/gtk/voip_calls.c b/ui/gtk/voip_calls.c index cae4e17afe..24b1af179e 100644 --- a/ui/gtk/voip_calls.c +++ b/ui/gtk/voip_calls.c @@ -563,10 +563,9 @@ RTP_packet(void *ptr _U_, packet_info *pinfo, epan_dissect_t *edt _U_, void cons /* Use existing packet info if available */ p_conv_data = (struct _rtp_conversation_info *)p_get_proto_data(wmem_file_scope(), pinfo, proto_get_id_by_filter_name("rtp"), 0); if (p_conv_data && p_conv_data->rtp_dyn_payload) { - encoding_name_and_rate_t *encoding_name_and_rate_pt = NULL; - encoding_name_and_rate_pt = (encoding_name_and_rate_t *)g_hash_table_lookup(p_conv_data->rtp_dyn_payload, &strinfo->pt); - if (encoding_name_and_rate_pt) { - strinfo->pt_str = g_strdup(encoding_name_and_rate_pt->encoding_name); + const gchar *encoding_name = rtp_dyn_payload_get_name(p_conv_data->rtp_dyn_payload, strinfo->pt); + if (encoding_name) { + strinfo->pt_str = g_strdup(encoding_name); } } } |