From 9ba786fba33279ad88828c22d0a332ffe6768866 Mon Sep 17 00:00:00 2001 From: Martin Kaiser Date: Sat, 3 Jun 2017 13:54:22 +0200 Subject: profinet dcp: don't THROW() an exception from a dissector In this case, we can simply replace the exception with an expert info and exit the loop. Change-Id: I232e554af299140d7123b5e21d78372a35a7923b Reviewed-on: https://code.wireshark.org/review/21936 Reviewed-by: Martin Kaiser Petri-Dish: Martin Kaiser Reviewed-by: Michael Mann --- plugins/profinet/packet-pn-dcp.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/profinet/packet-pn-dcp.c b/plugins/profinet/packet-pn-dcp.c index 4fa2b729a4..11900b1ea0 100644 --- a/plugins/profinet/packet-pn-dcp.c +++ b/plugins/profinet/packet-pn-dcp.c @@ -112,6 +112,7 @@ static int hf_pn_dcp_suboption_manuf = -1; static gint ett_pn_dcp = -1; static gint ett_pn_dcp_block = -1; +static expert_field ei_pn_dcp_block_parse_error = EI_INIT; static expert_field ei_pn_dcp_block_error_unknown = EI_INIT; static expert_field ei_pn_dcp_ip_conflict = EI_INIT; @@ -1101,7 +1102,9 @@ dissect_PNDCP_PDU(tvbuff_t *tvb, } /* prevent an infinite loop */ if (offset <= ori_offset || data_length < (offset - ori_offset)) { - THROW(ReportedBoundsError); + proto_tree_add_expert(tree, pinfo, &ei_pn_dcp_block_parse_error, + tvb, ori_offset, tvb_captured_length_remaining(tvb, ori_offset)); + break; } data_length -= (offset - ori_offset); } @@ -1354,6 +1357,7 @@ proto_register_pn_dcp (void) }; static ei_register_info ei[] = { + { &ei_pn_dcp_block_parse_error, { "pn_dcp.block_error.parse", PI_PROTOCOL, PI_ERROR, "parse error", EXPFILL }}, { &ei_pn_dcp_block_error_unknown, { "pn_dcp.block_error.unknown", PI_RESPONSE_CODE, PI_CHAT, "Unknown", EXPFILL }}, { &ei_pn_dcp_ip_conflict, { "pn_dcp.ip_conflict", PI_RESPONSE_CODE, PI_NOTE, "IP address conflict detected!", EXPFILL }}, }; -- cgit v1.2.1