Better length checks

This commit is contained in:
Scott Shawcroft 2022-06-13 09:18:42 -07:00
parent 6446010753
commit b191075ab8
No known key found for this signature in database
GPG Key ID: 0DFD512649C052DA
2 changed files with 8 additions and 5 deletions

View File

@ -249,7 +249,9 @@ wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t
bool connected = ((bits & WIFI_CONNECTED_BIT) != 0) &&
!((bits & WIFI_DISCONNECTED_BIT) != 0);
if (connected) {
if (memcmp(ssid, config->sta.ssid, ssid_len) == 0) {
// SSIDs are up to 32 bytes. Assume it is null terminated if it is less.
if (memcmp(ssid, config->sta.ssid, ssid_len) == 0 &&
(ssid_len == 32 || strlen((const char *)config->sta.ssid) == ssid_len)) {
// Already connected to the desired network.
return WIFI_RADIO_ERROR_NONE;
} else {
@ -272,7 +274,9 @@ wifi_radio_error_t common_hal_wifi_radio_connect(wifi_radio_obj_t *self, uint8_t
set_mode_station(self, true);
memcpy(&config->sta.ssid, ssid, ssid_len);
config->sta.ssid[ssid_len] = 0;
if (ssid_len < 32) {
config->sta.ssid[ssid_len] = 0;
}
memcpy(&config->sta.password, password, password_len);
config->sta.password[password_len] = 0;
config->sta.channel = channel;

View File

@ -257,6 +257,7 @@ STATIC mp_obj_t wifi_radio_start_ap(size_t n_args, const mp_obj_t *pos_args, mp_
mp_buffer_info_t ssid;
mp_get_buffer_raise(args[ARG_ssid].u_obj, &ssid, MP_BUFFER_READ);
mp_arg_validate_length_range(ssid.len, 1, 32, MP_QSTR_ssid);
mp_buffer_info_t password;
password.len = 0;
@ -330,9 +331,7 @@ STATIC mp_obj_t wifi_radio_connect(size_t n_args, const mp_obj_t *pos_args, mp_m
mp_buffer_info_t ssid;
ssid.len = 0;
mp_get_buffer_raise(args[ARG_ssid].u_obj, &ssid, MP_BUFFER_READ);
if (ssid.len > 32) {
mp_raise_ValueError(translate("ssid can't be more than 32 bytes"));
}
mp_arg_validate_length_range(ssid.len, 1, 32, MP_QSTR_ssid);
mp_buffer_info_t password;
password.len = 0;