aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-ppp.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/epan/dissectors/packet-ppp.c b/epan/dissectors/packet-ppp.c
index 76a704d108..7c7420cf2f 100644
--- a/epan/dissectors/packet-ppp.c
+++ b/epan/dissectors/packet-ppp.c
@@ -3275,8 +3275,6 @@ dissect_iphc_crtp_fh(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
ip_version = tvb_get_guint8(tvb, 0) >> 4;
next_protocol = tvb_get_guint8(tvb, 9);
- DISSECTOR_ASSERT((ip_version == 4) && (next_protocol == IP_PROTO_UDP));
-
if (tree) {
ti = proto_tree_add_protocol_format(tree, proto_iphc_crtp, tvb, 0, -1,
@@ -3285,17 +3283,31 @@ dissect_iphc_crtp_fh(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
flags = (tvb_get_guint8(tvb, 2) & IPHC_CRTP_FH_FLAG_MASK) >> IPHC_CRTP_FH_FLAG_POS;
+ /* flags field */
+ ti = proto_tree_add_item(fh_tree, hf_iphc_crtp_fh_flags, tvb, 2, 1, FALSE);
+
+ /* generation field */
+ ti = proto_tree_add_item(fh_tree, hf_iphc_crtp_gen, tvb, 2, 1, FALSE);
+
/* calculate length of IP header, assume IPv4 */
ip_hdr_len = (tvb_get_guint8(tvb, 0) & 0x0f) * 4;
/* calculate total hdr length, assume UDP */
hdr_len = ip_hdr_len + 8;
- /* flags field */
- ti = proto_tree_add_item(fh_tree, hf_iphc_crtp_fh_flags, tvb, 2, 1, FALSE);
+ if (ip_version != 4) {
+ proto_tree_add_text(fh_tree, tvb, 3, -1,
+ "IP version is %u: the only supported version is 4",
+ ip_version);
+ return;
+ }
- /* generation field */
- ti = proto_tree_add_item(fh_tree, hf_iphc_crtp_gen, tvb, 2, 1, FALSE);
+ if (next_protocol != IP_PROTO_UDP) {
+ proto_tree_add_text(fh_tree, tvb, 3, -1,
+ "Next protocol is %s (%u): the only supported protocol is UDP",
+ ipprotostr(next_protocol), next_protocol);
+ return;
+ }
/* context id and sequence fields */
switch (flags) {