aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-wccp.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2015-07-15 17:11:36 -0400
committerMichael Mann <mmann78@netscape.net>2015-07-17 11:28:17 +0000
commitb1eaf29d4056f05d1bd6a7f3d692553ec069a228 (patch)
tree15e6635bafc3207137116451850c862abe26191c /epan/dissectors/packet-wccp.c
parentad82dfd5547e460359eb3597ddb6760a29c40439 (diff)
WCCP - Only populate address table once and presume first address table type is the one that should populate it.
Ping-Bug: 11358 Change-Id: Ieed093b4aa263026772450f95dd5fa18280f9b76 Reviewed-on: https://code.wireshark.org/review/9648 Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-wccp.c')
-rw-r--r--epan/dissectors/packet-wccp.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/epan/dissectors/packet-wccp.c b/epan/dissectors/packet-wccp.c
index 61568d3b3d..e69d9ba04e 100644
--- a/epan/dissectors/packet-wccp.c
+++ b/epan/dissectors/packet-wccp.c
@@ -1854,7 +1854,6 @@ dissect_wccp2r1_address_table_info(tvbuff_t *tvb, int offset, int length,
EAT(4);
if (wccp_wccp_address_table.in_use == FALSE) {
- wccp_wccp_address_table.in_use = TRUE;
wccp_wccp_address_table.family = family;
wccp_wccp_address_table.table_length = table_length;
@@ -1897,13 +1896,17 @@ dissect_wccp2r1_address_table_info(tvbuff_t *tvb, int offset, int length,
case 1:
/* IPv4 */
addr = tvb_ip_to_str(tvb, offset);
- if ((wccp_wccp_address_table.table_ipv4 != NULL) && ((address_length * i) < wccp_wccp_address_table.table_length))
+ if ((wccp_wccp_address_table.in_use == FALSE) &&
+ (wccp_wccp_address_table.table_ipv4 != NULL) &&
+ ((address_length * i) < wccp_wccp_address_table.table_length))
wccp_wccp_address_table.table_ipv4[i] = tvb_get_ntohl(tvb, offset);
break;
case 2:
/* IPv6 */
addr = tvb_ip6_to_str(tvb, offset);
- if ((wccp_wccp_address_table.table_ipv6 != NULL) && ((address_length * i) < wccp_wccp_address_table.table_length))
+ if ((wccp_wccp_address_table.in_use == FALSE) &&
+ (wccp_wccp_address_table.table_ipv6 != NULL) &&
+ (i < wccp_wccp_address_table.table_length))
tvb_get_ipv6(tvb, offset, &(wccp_wccp_address_table.table_ipv6[i]));
break;
default:
@@ -1916,12 +1919,13 @@ dissect_wccp2r1_address_table_info(tvbuff_t *tvb, int offset, int length,
pi = proto_tree_add_string_format_value(element_tree, hf_address_table_element, tvb,
offset, address_length, addr,
"%d: %s", i+1, addr);
- if ((address_length * i) > wccp_wccp_address_table.table_length)
+ if (i > wccp_wccp_address_table.table_length)
expert_add_info_format(pinfo, pi, &ei_wccp_length_bad, "Ran out of space to store address");
}
EAT(address_length);
}
+ wccp_wccp_address_table.in_use = TRUE;
return length;
}