diff options
author | Bill Meier <wmeier@newsguy.com> | 2010-06-02 21:36:24 +0000 |
---|---|---|
committer | Bill Meier <wmeier@newsguy.com> | 2010-06-02 21:36:24 +0000 |
commit | 2be028a73f310d11e0560b46f0674803890adfdd (patch) | |
tree | 3971491ea98165e2857ee2106a1910159dcc8133 | |
parent | 32abf98aab5e2263fb4856e559e35f681cc036f9 (diff) | |
download | wireshark-2be028a73f310d11e0560b46f0674803890adfdd.tar.gz |
From Sven Eckelmann: Fix endless recursive loop
See Bug #2631: https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=2631
svn path=/trunk/; revision=33060
-rw-r--r-- | epan/dissectors/packet-batadv.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/epan/dissectors/packet-batadv.c b/epan/dissectors/packet-batadv.c index 56f365d4b8..d626c40a88 100644 --- a/epan/dissectors/packet-batadv.c +++ b/epan/dissectors/packet-batadv.c @@ -461,6 +461,9 @@ static void dissect_batadv_batman_v5(tvbuff_t *tvb, packet_info *pinfo, proto_tr } } + /* Calculate offset even when we got no tree */ + offset = BATMAN_PACKET_V5_SIZE + batman_packeth->num_hna * 6; + length_remaining = tvb_length_remaining(tvb, offset); if (length_remaining >= BATMAN_PACKET_V5_SIZE) { next_tvb = tvb_new_subset(tvb, offset, length_remaining, -1); @@ -572,6 +575,9 @@ static void dissect_batadv_batman_v7(tvbuff_t *tvb, packet_info *pinfo, proto_tr } } + /* Calculate offset even when we got no tree */ + offset = BATMAN_PACKET_V7_SIZE + batman_packeth->num_hna * 6; + length_remaining = tvb_length_remaining(tvb, offset); if (length_remaining >= BATMAN_PACKET_V7_SIZE) { next_tvb = tvb_new_subset(tvb, offset, length_remaining, -1); @@ -692,6 +698,9 @@ static void dissect_batadv_batman_v9(tvbuff_t *tvb, packet_info *pinfo, proto_tr } } + /* Calculate offset even when we got no tree */ + offset = BATMAN_PACKET_V9_SIZE + batman_packeth->num_hna * 6; + length_remaining = tvb_length_remaining(tvb, offset); if (length_remaining >= BATMAN_PACKET_V9_SIZE) { next_tvb = tvb_new_subset(tvb, offset, length_remaining, -1); @@ -798,6 +807,9 @@ static void dissect_batadv_bcast_v6(tvbuff_t *tvb, packet_info *pinfo, proto_tre offset += 2; } + /* Calculate offset even when we got no tree */ + offset = BCAST_PACKET_V6_SIZE; + SET_ADDRESS(&pinfo->dl_src, AT_ETHER, 6, orig_addr); SET_ADDRESS(&pinfo->src, AT_ETHER, 6, orig_addr); @@ -907,6 +919,9 @@ static void dissect_batadv_icmp_v6(tvbuff_t *tvb, packet_info *pinfo, proto_tree offset += 1; } + /* Calculate offset even when we got no tree */ + offset = ICMP_PACKET_V6_SIZE; + SET_ADDRESS(&pinfo->dl_src, AT_ETHER, 6, orig_addr); SET_ADDRESS(&pinfo->src, AT_ETHER, 6, orig_addr); @@ -991,6 +1006,9 @@ static void dissect_batadv_icmp_v7(tvbuff_t *tvb, packet_info *pinfo, proto_tree offset += 1; } + /* Calculate offset even when we got no tree */ + offset = ICMP_PACKET_V7_SIZE; + SET_ADDRESS(&pinfo->dl_src, AT_ETHER, 6, orig_addr); SET_ADDRESS(&pinfo->src, AT_ETHER, 6, orig_addr); @@ -1078,6 +1096,9 @@ static void dissect_batadv_unicast_v6(tvbuff_t *tvb, packet_info *pinfo, proto_t offset += 1; } + /* Calculate offset even when we got no tree */ + offset = UNICAST_PACKET_V6_SIZE; + SET_ADDRESS(&pinfo->dl_dst, AT_ETHER, 6, dest_addr); SET_ADDRESS(&pinfo->dst, AT_ETHER, 6, dest_addr); @@ -1191,6 +1212,9 @@ static void dissect_batadv_vis_v6(tvbuff_t *tvb, packet_info *pinfo, proto_tree offset += 6; } + /* Calculate offset even when we got no tree */ + offset = VIS_PACKET_V6_SIZE; + SET_ADDRESS(&pinfo->dl_src, AT_ETHER, 6, sender_orig_addr); SET_ADDRESS(&pinfo->src, AT_ETHER, 6, vis_orig_addr); |