forked from osmocom/wireshark
raknet: don't THROW() an exception from a dissector
Show an expert info and return from raknet_dissect_system_address(). Change-Id: Icedab5f1956d4b4c60318a1dd4f65bc7078d4e20 Reviewed-on: https://code.wireshark.org/review/21168 Reviewed-by: Michael Mann <mmann78@netscape.net> Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Martin Kaiser <wireshark@kaiser.cx>
This commit is contained in:
parent
c54afb89a2
commit
3c5183326b
|
@ -72,6 +72,7 @@ static heur_dissector_list_t raknet_heur_subdissectors = NULL;
|
|||
static expert_field ei_raknet_unknown_message_id = EI_INIT;
|
||||
static expert_field ei_raknet_encrypted_message = EI_INIT;
|
||||
static expert_field ei_raknet_subdissector_failed = EI_INIT;
|
||||
static expert_field ei_raknet_ip_ver_invalid = EI_INIT;
|
||||
|
||||
/*
|
||||
* First byte gives us the packet id
|
||||
|
@ -267,7 +268,8 @@ raknet_conversation_set_dissector(packet_info *pinfo, const dissector_handle_t h
|
|||
}
|
||||
|
||||
static void
|
||||
raknet_dissect_system_address(proto_tree *tree, int hf, tvbuff_t *tvb, gint *offset) {
|
||||
raknet_dissect_system_address(proto_tree *tree, int hf,
|
||||
packet_info *pinfo, tvbuff_t *tvb, gint *offset) {
|
||||
proto_item *ti;
|
||||
proto_tree *sub_tree;
|
||||
guint8 ip_version;
|
||||
|
@ -312,7 +314,8 @@ raknet_dissect_system_address(proto_tree *tree, int hf, tvbuff_t *tvb, gint *off
|
|||
proto_item_append_text(ti, "[%s]:%" G_GUINT16_FORMAT, addr_str, port);
|
||||
break;
|
||||
default:
|
||||
THROW(ReportedBoundsError);
|
||||
proto_item_set_len(ti, 1);
|
||||
expert_add_info(pinfo, sub_tree, &ei_raknet_ip_ver_invalid);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -441,7 +444,8 @@ raknet_dissect_open_connection_request_2(tvbuff_t *tvb, packet_info *pinfo, prot
|
|||
}
|
||||
}
|
||||
|
||||
raknet_dissect_system_address(sub_tree, hf_raknet_server_address, tvb, &offset);
|
||||
raknet_dissect_system_address(
|
||||
sub_tree, hf_raknet_server_address, pinfo, tvb, &offset);
|
||||
|
||||
proto_tree_add_item(sub_tree, hf_raknet_mtu_size, tvb, offset,
|
||||
2, ENC_BIG_ENDIAN);
|
||||
|
@ -472,7 +476,8 @@ raknet_dissect_open_connection_reply_2(tvbuff_t *tvb, packet_info *pinfo, proto_
|
|||
8, ENC_NA);
|
||||
offset += 8;
|
||||
|
||||
raknet_dissect_system_address(sub_tree, hf_raknet_client_address, tvb, &offset);
|
||||
raknet_dissect_system_address(
|
||||
sub_tree, hf_raknet_client_address, pinfo, tvb, &offset);
|
||||
|
||||
proto_tree_add_item(sub_tree, hf_raknet_mtu_size, tvb, offset,
|
||||
2, ENC_BIG_ENDIAN);
|
||||
|
@ -656,14 +661,16 @@ raknet_dissect_connection_request_accepted(tvbuff_t *tvb, packet_info *pinfo _U_
|
|||
gint offset = 1;
|
||||
gint i;
|
||||
|
||||
raknet_dissect_system_address(tree, hf_raknet_client_address, tvb, &offset);
|
||||
raknet_dissect_system_address(
|
||||
tree, hf_raknet_client_address, pinfo, tvb, &offset);
|
||||
|
||||
proto_tree_add_item(tree, hf_raknet_system_index, tvb, offset,
|
||||
2, ENC_BIG_ENDIAN);
|
||||
offset += 2;
|
||||
|
||||
for (i = 0; i < RAKNET_NUMBER_OF_INTERNAL_IDS; i++) {
|
||||
raknet_dissect_system_address(tree, hf_raknet_internal_address, tvb, &offset);
|
||||
raknet_dissect_system_address(
|
||||
tree, hf_raknet_internal_address, pinfo, tvb, &offset);
|
||||
}
|
||||
|
||||
proto_tree_add_item(tree, hf_raknet_timestamp, tvb,
|
||||
|
@ -678,17 +685,19 @@ raknet_dissect_connection_request_accepted(tvbuff_t *tvb, packet_info *pinfo _U_
|
|||
}
|
||||
|
||||
static int
|
||||
raknet_dissect_new_incoming_connection(tvbuff_t *tvb, packet_info *pinfo _U_,
|
||||
raknet_dissect_new_incoming_connection(tvbuff_t *tvb, packet_info *pinfo,
|
||||
proto_tree *tree, void* data _U_)
|
||||
{
|
||||
|
||||
gint offset = 1;
|
||||
gint i;
|
||||
|
||||
raknet_dissect_system_address(tree, hf_raknet_server_address, tvb, &offset);
|
||||
raknet_dissect_system_address(
|
||||
tree, hf_raknet_server_address, pinfo, tvb, &offset);
|
||||
|
||||
for (i = 0; i < RAKNET_NUMBER_OF_INTERNAL_IDS; i++) {
|
||||
raknet_dissect_system_address(tree, hf_raknet_internal_address, tvb, &offset);
|
||||
raknet_dissect_system_address(
|
||||
tree, hf_raknet_internal_address, pinfo, tvb, &offset);
|
||||
}
|
||||
|
||||
proto_tree_add_item(tree, hf_raknet_timestamp, tvb,
|
||||
|
@ -1930,6 +1939,11 @@ proto_register_raknet(void)
|
|||
"RakNet message subdissector failed, trying the next candidate or heuristics",
|
||||
EXPFILL }
|
||||
},
|
||||
{ &ei_raknet_ip_ver_invalid,
|
||||
{ "raknet.ip_version.invalid", PI_PROTOCOL, PI_WARN,
|
||||
"Invalid IP version",
|
||||
EXPFILL }
|
||||
}
|
||||
};
|
||||
expert_module_t *expert_raknet;
|
||||
|
||||
|
|
Loading…
Reference in New Issue