fixed 32/64 chars limits in ssid/key

This commit is contained in:
2021-08-05 15:42:52 +02:00
parent 502fb97e22
commit 717d877a44

View File

@@ -8,7 +8,6 @@
#include <string>
#include <queue>
#include <functional>
#include <cstring>
#include <atomic>
// esp-idf includes
@@ -395,6 +394,16 @@ esp_err_t goe_wifi_enable_ap(bool enable, const config &config)
return result;
}
template<size_t LENGTH>
size_t copyStrToBuf(uint8_t (&buf)[LENGTH], std::string_view str)
{
size_t cutLength = std::min(LENGTH, str.size());
std::copy(std::begin(str), std::begin(str) + cutLength, buf);
if (str.size() < LENGTH)
buf[str.size()] = '\0';
return cutLength;
}
wifi_config_t make_ap_config(const ap_config &ap_config)
{
wifi_config_t wifi_config;
@@ -408,13 +417,13 @@ wifi_config_t make_ap_config(const ap_config &ap_config)
wifi_config.ap.password[0] = 0;
if (!ap_config.ssid.empty())
{
std::snprintf((char*)wifi_config.ap.ssid, sizeof(wifi_config.ap.ssid), "%s", ap_config.ssid.c_str());
wifi_config.ap.ssid_len = ap_config.ssid.size();
auto ssidCutLength = copyStrToBuf(wifi_config.ap.ssid, ap_config.ssid);
wifi_config.ap.ssid_len = ssidCutLength;
if (!ap_config.key.empty())
{
wifi_config.ap.authmode = ap_config.authmode;
std::snprintf((char*)wifi_config.ap.password, sizeof(wifi_config.ap.password), "%s", ap_config.key.c_str());
copyStrToBuf(wifi_config.ap.password, ap_config.key);
}
}
return wifi_config;
@@ -428,6 +437,12 @@ esp_err_t goe_wifi_set_ap_config(const config &config, const ap_config &ap_confi
return ESP_FAIL;
}
if (ap_config.ssid.size() > 32)
{
ESP_LOGE(TAG, "SSID too long! (size=%zd)", ap_config.ssid.size());
return ESP_FAIL;
}
if (!ap_config.key.empty())
{
if (ap_config.key.size() < 8)
@@ -435,7 +450,7 @@ esp_err_t goe_wifi_set_ap_config(const config &config, const ap_config &ap_confi
ESP_LOGE(TAG, "passphrase too short! (size=%zd)", ap_config.key.size());
return ESP_FAIL;
}
if (ap_config.key.size() > 63)
if (ap_config.key.size() > 64)
{
ESP_LOGE(TAG, "passphrase too long! (size=%zd)", ap_config.key.size());
return ESP_FAIL;
@@ -1296,12 +1311,12 @@ wifi_config_t make_sta_config(std::string_view ssid, std::string_view password,
if (!ssid.empty())
{
std::snprintf((char*)wifi_config.sta.ssid, sizeof(wifi_config.sta.ssid), "%s", ssid.data());
copyStrToBuf(wifi_config.sta.ssid, ssid);
if (!password.empty())
{
wifi_config.sta.threshold.authmode = WIFI_AUTH_WEP;
std::snprintf((char*)wifi_config.sta.password, sizeof(wifi_config.sta.password), "%s", password.data());
copyStrToBuf(wifi_config.sta.password, password);
}
if (bssid)
@@ -1329,7 +1344,7 @@ esp_err_t goe_wifi_sta_begin(const config &config, const wifi_entry &sta_config,
return ESP_FAIL;
}
if (sta_config.ssid.size() > 31)
if (sta_config.ssid.size() > 32)
{
ESP_LOGE(TAG, "SSID too long! (size=%zd)", sta_config.ssid.size());
return ESP_FAIL;
@@ -1343,7 +1358,7 @@ esp_err_t goe_wifi_sta_begin(const config &config, const wifi_entry &sta_config,
return ESP_FAIL;
}
if (sta_config.key.size() > 63)
if (sta_config.key.size() > 64)
{
ESP_LOGE(TAG, "key too long! (size=%zd)", sta_config.key.size());
return ESP_FAIL;