diff options
-rw-r--r-- | src/libwifi/parse/management/common.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libwifi/parse/management/common.c b/src/libwifi/parse/management/common.c index e847415..5e4fbf6 100644 --- a/src/libwifi/parse/management/common.c +++ b/src/libwifi/parse/management/common.c | |||
@@ -68,7 +68,9 @@ void libwifi_handle_ssid_tag(void *target, int target_type, const char *tag_data | |||
68 | int libwifi_bss_handle_rsn_tag(struct libwifi_bss *bss, const unsigned char *rsn_data, int rsn_len) { | 68 | int libwifi_bss_handle_rsn_tag(struct libwifi_bss *bss, const unsigned char *rsn_data, int rsn_len) { |
69 | struct libwifi_rsn_info rsn_info = {0}; | 69 | struct libwifi_rsn_info rsn_info = {0}; |
70 | 70 | ||
71 | bss->encryption_info &= ~(unsigned int) WEP; | 71 | if (bss->encryption_info & WEP) { |
72 | bss->encryption_info &= ~(unsigned int) WEP; | ||
73 | } | ||
72 | 74 | ||
73 | int min_len = sizeof(rsn_info.rsn_version) + sizeof(struct libwifi_cipher_suite); | 75 | int min_len = sizeof(rsn_info.rsn_version) + sizeof(struct libwifi_cipher_suite); |
74 | if (rsn_len < min_len) { | 76 | if (rsn_len < min_len) { |
@@ -105,7 +107,9 @@ int libwifi_bss_handle_msft_tag(struct libwifi_bss *bss, const unsigned char *ms | |||
105 | 107 | ||
106 | switch (vendor_header->type) { | 108 | switch (vendor_header->type) { |
107 | case MICROSOFT_OUI_TYPE_WPA: | 109 | case MICROSOFT_OUI_TYPE_WPA: |
108 | bss->encryption_info &= ~(unsigned int) WEP; | 110 | if (bss->encryption_info & WEP) { |
111 | bss->encryption_info &= ~(unsigned int) WEP; | ||
112 | } | ||
109 | bss->encryption_info |= WPA; | 113 | bss->encryption_info |= WPA; |
110 | 114 | ||
111 | // Skip 4 bytes for the OUI (3) and Vendor Tag Type (1) | 115 | // Skip 4 bytes for the OUI (3) and Vendor Tag Type (1) |