2626#define MAC_IE_HEADER_ID_MASK 0x7f80
2727#define MAC_IE_PAYLOAD_LENGTH_MASK 0x07ff
2828#define MAC_IE_PAYLOAD_ID_MASK 0x7800
29+ #define MAC_IE_TYPE_PAYLOAD_MASK 0x8000
2930
3031#define MAC_NESTED_LONG_IE_PAYLOAD_LENGTH_MASK 0x07ff
3132#define MAC_NESTED_LONG_IE_PAYLOAD_ID_MASK 0x7800
3233#define MAC_NESTED_SHORT_IE_PAYLOAD_LENGTH_MASK 0x00ff
3334#define MAC_NESTED_SHORT_IE_PAYLOAD_ID_MASK 0x7f00
35+ #define MAC_NESTED_IE_TYPE_LONG_MASK 0x8000
3436
3537static void mac_ie_header_parse (mac_header_IE_t * header_element , uint8_t * ptr )
3638{
@@ -52,7 +54,7 @@ static void mac_ie_nested_id_parse(mac_nested_payload_IE_t *element, uint8_t *pt
5254{
5355 uint16_t ie_dummy = common_read_16_bit_inverse (ptr );
5456
55- if (ie_dummy & 0x8000 ) {
57+ if (ie_dummy & MAC_NESTED_IE_TYPE_LONG_MASK ) {
5658 element -> type_long = true;
5759 element -> length = (ie_dummy & MAC_NESTED_LONG_IE_PAYLOAD_LENGTH_MASK );
5860 element -> id = ((ie_dummy & MAC_NESTED_LONG_IE_PAYLOAD_ID_MASK ) >> 11 );
@@ -77,15 +79,15 @@ uint8_t *mac_ie_header_base_write(uint8_t *ptr, uint8_t type, uint16_t length)
7779uint8_t * mac_ie_payload_base_write (uint8_t * ptr , uint8_t type , uint16_t length )
7880{
7981
80- uint16_t ie_dummy = 0x8000 ; //Payload type
82+ uint16_t ie_dummy = MAC_IE_TYPE_PAYLOAD_MASK ; //Payload type
8183 ie_dummy |= (length & MAC_IE_PAYLOAD_LENGTH_MASK );
8284 ie_dummy |= ((type << 11 ) & MAC_IE_PAYLOAD_ID_MASK );
8385 return common_write_16_bit_inverse (ie_dummy , ptr );
8486}
8587
8688uint8_t * mac_ie_nested_ie_long_base_write (uint8_t * ptr , uint8_t sub_id , uint16_t length )
8789{
88- uint16_t ie_dummy = 0x8000 ;
90+ uint16_t ie_dummy = MAC_NESTED_IE_TYPE_LONG_MASK ;
8991 ie_dummy |= (length & MAC_NESTED_LONG_IE_PAYLOAD_LENGTH_MASK );
9092 ie_dummy |= ((sub_id << 11 ) & MAC_NESTED_LONG_IE_PAYLOAD_ID_MASK );
9193
@@ -112,7 +114,7 @@ uint16_t mac_ie_payload_discover(uint8_t *payload_ptr, uint16_t length, mac_payl
112114 return ie_element .length ;
113115 }
114116
115- length -= ie_element .length + 2 ;
117+ length -= ie_element .length + 2 ;
116118
117119 payload_ptr += ie_element .length + 2 ;
118120 }
@@ -124,13 +126,18 @@ uint16_t mac_ie_nested_discover(uint8_t *payload_ptr, uint16_t length, mac_neste
124126 mac_nested_payload_IE_t ie_element ;
125127 while (length >= 2 ) {
126128 mac_ie_nested_id_parse (& ie_element , payload_ptr );
129+
130+ if (length < ie_element .length + 2 ) {
131+ return 0 ;
132+ }
133+
127134 if (nested_ie -> id == ie_element .id && nested_ie -> type_long == ie_element .type_long ) {
128135 nested_ie -> content_ptr = ie_element .content_ptr ;
129136 nested_ie -> length = ie_element .length ;
130137 return ie_element .length ;
131138 }
132139
133- length -= ie_element .length + 2 ;
140+ length -= ie_element .length + 2 ;
134141
135142 payload_ptr += ie_element .length + 2 ;
136143 }
@@ -148,7 +155,7 @@ uint8_t mac_ie_header_discover(uint8_t *header_ptr, uint16_t length, mac_header_
148155 return ie_element .length ;
149156 }
150157
151- length -= ie_element .length + 2 ;
158+ length -= ie_element .length + 2 ;
152159
153160 header_ptr += ie_element .length + 2 ;
154161 }
@@ -170,7 +177,7 @@ uint8_t mac_ie_header_sub_id_discover(uint8_t *header_ptr, uint16_t length, mac_
170177 return ie_element .length ;
171178 }
172179
173- length -= ie_element .length + 2 ;
180+ length -= ie_element .length + 2 ;
174181
175182 header_ptr += ie_element .length + 2 ;
176183 }
0 commit comments