bootp: replace THROW() by an expert info

abort the dissection in this case

Change-Id: Ic65f7535422d1c0a6e395a15fbc4a8ae550c0976
Reviewed-on: https://code.wireshark.org/review/9144
Petri-Dish: Martin Kaiser <wireshark@kaiser.cx>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Martin Kaiser 2015-06-25 11:25:44 -07:00 committed by Anders Broman
parent f613b92fd2
commit b0584aec1b
1 changed files with 12 additions and 6 deletions

View File

@ -513,6 +513,7 @@ static expert_field ei_bootp_option_classless_static_route = EI_INIT;
static expert_field ei_bootp_option125_enterprise_malformed = EI_INIT;
static expert_field ei_bootp_option_6RD_malformed = EI_INIT;
static expert_field ei_bootp_option82_vi_cl_tag_unknown = EI_INIT;
static expert_field ei_bootp_option_parse_err = EI_INIT;
static expert_field ei_bootp_suboption_invalid = EI_INIT;
static expert_field ei_bootp_secs_le = EI_INIT;
static expert_field ei_bootp_end_option_missing = EI_INIT;
@ -5170,6 +5171,9 @@ dissect_bootp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
eoff = tvb_reported_length(tvb);
bp_ti = proto_tree_add_item(tree, proto_bootp, tvb, 0, -1, ENC_NA);
bp_tree = proto_item_add_subtree(bp_ti, ett_bootp);
/*
* In the first pass, we just look for the DHCP message type
* and Vendor class identifier options.
@ -5182,7 +5186,9 @@ dissect_bootp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset_delta = bootp_option(tvb, pinfo, NULL, NULL, tmpvoff, eoff, TRUE, &at_end,
&dhcp_type, &vendor_class_id, &overload);
if (offset_delta <= 0) {
THROW(ReportedBoundsError);
proto_tree_add_expert(bp_tree, pinfo, &ei_bootp_option_parse_err,
tvb, tmpvoff, eoff);
return;
}
tmpvoff += offset_delta;
}
@ -5204,12 +5210,9 @@ dissect_bootp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
/*
* OK, now build the protocol tree.
* OK, now populate the protocol tree.
*/
bp_ti = proto_tree_add_item(tree, proto_bootp, tvb, 0, -1, ENC_NA);
bp_tree = proto_item_add_subtree(bp_ti, ett_bootp);
proto_tree_add_uint(bp_tree, hf_bootp_type, tvb,
0, 1,
op);
@ -5324,7 +5327,9 @@ dissect_bootp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset_delta = bootp_option(tvb, pinfo, bp_tree, bp_ti, voff, eoff, FALSE, &at_end,
&dhcp_type, &vendor_class_id, &overload);
if (offset_delta <= 0) {
THROW(ReportedBoundsError);
proto_tree_add_expert(bp_tree, pinfo, &ei_bootp_option_parse_err,
tvb, voff, eoff);
return;
}
voff += offset_delta;
}
@ -7401,6 +7406,7 @@ proto_register_bootp(void)
{ &ei_bootp_option125_enterprise_malformed, { "bootp.option.enterprise.malformed", PI_PROTOCOL, PI_ERROR, "no room left in option for enterprise data", EXPFILL }},
{ &ei_bootp_option_6RD_malformed, { "bootp.option.6RD.malformed", PI_PROTOCOL, PI_ERROR, "6RD: malformed option", EXPFILL }},
{ &ei_bootp_option82_vi_cl_tag_unknown, { "bootp.option.option.vi.cl.tag_unknown", PI_PROTOCOL, PI_ERROR, "Unknown tag", EXPFILL }},
{ &ei_bootp_option_parse_err, { "bootp.option.parse_err", PI_PROTOCOL, PI_ERROR, "Parse error", EXPFILL }},
{ &ei_bootp_suboption_invalid, { "bootp.suboption_invalid", PI_PROTOCOL, PI_ERROR, "Invalid suboption", EXPFILL }},
{ &ei_bootp_secs_le, { "bootp.secs_le", PI_PROTOCOL, PI_NOTE, "Seconds elapsed appears to be encoded as little-endian", EXPFILL }},
{ &ei_bootp_end_option_missing, { "bootp.end_option_missing", PI_PROTOCOL, PI_ERROR, "End option missing", EXPFILL }},