diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2015-01-29 13:55:00 +0100 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2015-01-29 20:25:09 +0000 |
commit | 2edf8bbd33e4820c19a52a435ddb2cc8e3e32fdb (patch) | |
tree | 69df6b78b4d58e66f0b650540e37c92899757205 | |
parent | 0ba51cc0b248e1b72f6eb4ded5128c4ac88d6a28 (diff) |
SDP: check that media format starts with a digit before trying to identify media type
Bug: 10899
Change-Id: I92319a668ae795247d4021f32d629f5000ceb395
Reviewed-on: https://code.wireshark.org/review/6841
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
-rw-r--r-- | epan/dissectors/packet-sdp.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/epan/dissectors/packet-sdp.c b/epan/dissectors/packet-sdp.c index e62db324bc..73697ae6a5 100644 --- a/epan/dissectors/packet-sdp.c +++ b/epan/dissectors/packet-sdp.c @@ -958,15 +958,20 @@ dissect_sdp_media(tvbuff_t *tvb, proto_item *ti, if (!strcmp(media_info->media_proto[media_info->media_count], "RTP/AVP")) { media_format = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, tokenlen, ENC_UTF_8|ENC_NA); - proto_tree_add_string(sdp_media_tree, hf_media_format, tvb, offset, - tokenlen, val_to_str_ext((guint32)strtoul((char*)media_format, NULL, 10), &rtp_payload_type_vals_ext, "%u")); - idx = transport_info->media[transport_info->media_count].pt_count; - transport_info->media[transport_info->media_count].pt[idx] = (gint32)strtol((char*)media_format, NULL, 10); - DPRINT(("parsed media codec pt=%d, for media_count=%d", - transport_info->media[transport_info->media_count].pt[idx], - transport_info->media_count)); - if (idx < (SDP_MAX_RTP_PAYLOAD_TYPES-1)) - transport_info->media[transport_info->media_count].pt_count++; + if (g_ascii_isdigit(media_format[0])) { + proto_tree_add_string(sdp_media_tree, hf_media_format, tvb, offset, + tokenlen, val_to_str_ext((guint32)strtoul((char*)media_format, NULL, 10), &rtp_payload_type_vals_ext, "%u")); + idx = transport_info->media[transport_info->media_count].pt_count; + transport_info->media[transport_info->media_count].pt[idx] = (gint32)strtol((char*)media_format, NULL, 10); + DPRINT(("parsed media codec pt=%d, for media_count=%d", + transport_info->media[transport_info->media_count].pt[idx], + transport_info->media_count)); + if (idx < (SDP_MAX_RTP_PAYLOAD_TYPES-1)) + transport_info->media[transport_info->media_count].pt_count++; + } else { + proto_tree_add_item(sdp_media_tree, hf_media_format, tvb, offset, + tokenlen, ENC_UTF_8|ENC_NA); + } } else { proto_tree_add_item(sdp_media_tree, hf_media_format, tvb, offset, tokenlen, ENC_UTF_8|ENC_NA); |