aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-ieee80211-radiotap-defs.h2
-rw-r--r--epan/dissectors/packet-ieee80211-radiotap.c9
2 files changed, 10 insertions, 1 deletions
diff --git a/epan/dissectors/packet-ieee80211-radiotap-defs.h b/epan/dissectors/packet-ieee80211-radiotap-defs.h
index 0124c6fb0b..f1570e30c3 100644
--- a/epan/dissectors/packet-ieee80211-radiotap-defs.h
+++ b/epan/dissectors/packet-ieee80211-radiotap-defs.h
@@ -209,7 +209,7 @@ enum ieee80211_radiotap_type {
/* not (yet) defined Radiotap present flag */
/* Bit 25 and 28 are not defined (in binary : 0001 0010 0000 0000 0000 0000 0000 0000 */
-#define IEEE80211_RADIOTAP_NOTDEFINED 0x1A000000
+#define IEEE80211_RADIOTAP_NOTDEFINED 0x10000000
/* Channel flags. */
/* 0x00000001 through 0x00000008 undefined (reserved?) */
diff --git a/epan/dissectors/packet-ieee80211-radiotap.c b/epan/dissectors/packet-ieee80211-radiotap.c
index 5fec3e5356..dbb16e95b7 100644
--- a/epan/dissectors/packet-ieee80211-radiotap.c
+++ b/epan/dissectors/packet-ieee80211-radiotap.c
@@ -1937,6 +1937,7 @@ dissect_radiotap(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* u
gboolean rtap_ns_next;
guint rtap_ns_offset;
guint rtap_ns_offset_next;
+ gboolean zero_length_psdu = FALSE;
/* our non-standard overrides */
static struct radiotap_override overrides[] = {
@@ -2744,6 +2745,7 @@ dissect_radiotap(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* u
break;
case IEEE80211_RADIOTAP_0_LENGTH_PSDU:
dissect_radiotap_0_length_psdu(tvb, pinfo, radiotap_tree, offset, &phdr);
+ zero_length_psdu = TRUE;
break;
case IEEE80211_RADIOTAP_L_SIG:
dissect_radiotap_l_sig(tvb, pinfo, radiotap_tree, offset);
@@ -2758,6 +2760,13 @@ dissect_radiotap(tvbuff_t * tvb, packet_info * pinfo, proto_tree * tree, void* u
proto_item_append_text(ti, " (malformed)");
}
+ /*
+ * Is there any more there?
+ */
+ if (zero_length_psdu) {
+ return tvb_captured_length(tvb);
+ }
+
hand_off_to_80211:
/* Grab the rest of the frame. */
next_tvb = tvb_new_subset_remaining(tvb, length);