luci-mod-network: fix SAE/WPA check on network join
authorJo-Philipp Wich <jo@mein.io>
Sun, 1 Nov 2020 17:20:36 +0000 (18:20 +0100)
committerJo-Philipp Wich <jo@mein.io>
Sun, 1 Nov 2020 17:24:13 +0000 (18:24 +0100)
The method array may be null in case of an open network, also not all
occurrences of `is_sae` and `is_psk` were properly checked.

Resolve the issue by moving the length check to the variable initialization.

Fixes: ba98a2fd0 ("luci-mod-network: fix logic bug in parse enc for network join")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js

index 6a55a8fd5de08201d35a3f4ae8fc7654ea1673df..9669055f18a980cd8eda71b9a7e9bd4765022343 100644 (file)
@@ -1799,8 +1799,8 @@ return view.extend({
                            zoneval = zoneopt ? zoneopt.formvalue('_new_') : null,
                            enc = L.isObject(bss.encryption) ? bss.encryption : null,
                            is_wep = (enc && Array.isArray(enc.wep)),
-                           is_psk = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'psk' })),
-                           is_sae = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'sae' }));
+                           is_psk = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'psk' }).length > 0),
+                           is_sae = (enc && Array.isArray(enc.wpa) && L.toArray(enc.authentication).filter(function(a) { return a == 'sae' }).length > 0);
 
                        if (nameval == null || (passopt && passval == null))
                                return;
@@ -1841,11 +1841,11 @@ return view.extend({
                                        uci.set('wireless', section_id, 'bssid', bss.bssid);
                                }
 
-                               if (is_sae.length > 0) {
+                               if (is_sae) {
                                        uci.set('wireless', section_id, 'encryption', 'sae');
                                        uci.set('wireless', section_id, 'key', passval);
                                }
-                               else if (is_psk.length > 0) {
+                               else if (is_psk) {
                                        for (var i = enc.wpa.length - 1; i >= 0; i--) {
                                                if (enc.wpa[i] == 2) {
                                                        uci.set('wireless', section_id, 'encryption', 'psk2');