aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-radius.c
diff options
context:
space:
mode:
authorUli Heilmeier <uh@heilmeier.eu>2018-09-05 01:12:46 +0200
committerAlexis La Goutte <alexis.lagoutte@gmail.com>2018-09-05 08:41:17 +0000
commit6e36e3757a499c2347db4cb1633cc2824577bc87 (patch)
tree1bbb36c763b4f862cbcf885266cc6cccf5c4ce74 /epan/dissectors/packet-radius.c
parent3df8dc99d60e1362d370d40c2a1bde233ffb2ab1 (diff)
Radius: Fix offset for multiple VSA in one AVP
When there are multiple VSAs in one AVP we should forward the vendor_offset. The length field includes the type field therefore we have to subtract it. Bug: 15073 Change-Id: If365ebca493208d67b3283fe876d2d1b0bda64af Reviewed-on: https://code.wireshark.org/review/29421 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-radius.c')
-rw-r--r--epan/dissectors/packet-radius.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/epan/dissectors/packet-radius.c b/epan/dissectors/packet-radius.c
index 1243b99e2c..5f11f14d31 100644
--- a/epan/dissectors/packet-radius.c
+++ b/epan/dissectors/packet-radius.c
@@ -1538,6 +1538,7 @@ dissect_attribute_value_pairs(proto_tree *tree, packet_info *pinfo, tvbuff_t *tv
guint32 avp_vsa_len;
guint8 avp_vsa_flags = 0;
guint32 avp_vsa_header_len;
+ guint32 vendor_attribute_len;
switch (vendor->type_octets) {
case 1:
@@ -1627,8 +1628,8 @@ dissect_attribute_value_pairs(proto_tree *tree, packet_info *pinfo, tvbuff_t *tv
proto_tree_add_item(avp_tree, hf_radius_avp_vendor_type, tvb, vendor_offset, vendor->type_octets, ENC_BIG_ENDIAN);
vendor_offset += vendor->type_octets;
if (!avp_is_extended && vendor->length_octets) {
- proto_tree_add_item(avp_tree, hf_radius_avp_vendor_len, tvb, vendor_offset, vendor->length_octets, ENC_BIG_ENDIAN);
- /* vendor_offset += vendor->length_octets; */
+ proto_tree_add_item_ret_uint(avp_tree, hf_radius_avp_vendor_len, tvb, vendor_offset, vendor->length_octets, ENC_BIG_ENDIAN, &vendor_attribute_len);
+ vendor_offset += (vendor_attribute_len - vendor->type_octets);
}
if (show_length) {