diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp index 5ce0dab93f..146c968a58 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFi.cpp @@ -72,13 +72,19 @@ void ESP8266WiFiClass::printDiag(Print& p) { struct station_config conf; wifi_station_get_config(&conf); - const char* ssid = reinterpret_cast(conf.ssid); + char ssid[33]; //ssid can be up to 32chars, => plus null term + memcpy(ssid, conf.ssid, sizeof(conf.ssid)); + ssid[32] = 0; //nullterm in case of 32 char ssid + p.print("SSID ("); p.print(strlen(ssid)); p.print("): "); p.println(ssid); - const char* passphrase = reinterpret_cast(conf.password); + char passphrase[65]; + memcpy(passphrase, conf.password, sizeof(conf.password)); + passphrase[64] = 0; + p.print("Passphrase ("); p.print(strlen(passphrase)); p.print("): "); diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp index 449c30f872..3a88c7e69b 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiMulti.cpp @@ -187,7 +187,7 @@ bool ESP8266WiFiMulti::APlistAdd(const char* ssid, const char *passphrase) { WifiAPEntry newAP; - if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { + if(!ssid || *ssid == 0x00 || strlen(ssid) > 32) { // fail SSID too long or missing! DEBUG_WIFI_MULTI("[WIFI][APlistAdd] no ssid or ssid too long\n"); return false; @@ -230,7 +230,7 @@ bool ESP8266WiFiMulti::APlistAdd(const char* ssid, const char *passphrase) { } bool ESP8266WiFiMulti::APlistExists(const char* ssid, const char *passphrase) { - if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { + if(!ssid || *ssid == 0x00 || strlen(ssid) > 32) { // fail SSID too long or missing! DEBUG_WIFI_MULTI("[WIFI][APlistExists] no ssid or ssid too long\n"); return false; diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp index ba6a5eb65a..b9a0fdf121 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp @@ -62,7 +62,7 @@ static bool sta_config_equal(const station_config& lhs, const station_config& rh * @return equal */ static bool sta_config_equal(const station_config& lhs, const station_config& rhs) { - if(strcmp(reinterpret_cast(lhs.ssid), reinterpret_cast(rhs.ssid)) != 0) { + if(strncmp(reinterpret_cast(lhs.ssid), reinterpret_cast(rhs.ssid), sizeof(lhs.ssid)) != 0) { return false; } @@ -108,7 +108,7 @@ wl_status_t ESP8266WiFiSTAClass::begin(const char* ssid, const char *passphrase, return WL_CONNECT_FAILED; } - if(!ssid || *ssid == 0x00 || strlen(ssid) > 31) { + if(!ssid || *ssid == 0x00 || strlen(ssid) > 32) { // fail SSID too long or missing! return WL_CONNECT_FAILED; } @@ -119,10 +119,12 @@ wl_status_t ESP8266WiFiSTAClass::begin(const char* ssid, const char *passphrase, } struct station_config conf; - strcpy(reinterpret_cast(conf.ssid), ssid); + if(strlen(ssid) == 32) + memcpy(reinterpret_cast(conf.ssid), ssid, 32); //copied in without null term + else + strcpy(reinterpret_cast(conf.ssid), ssid); conf.threshold.authmode = AUTH_OPEN; - if(passphrase) { conf.threshold.authmode = _useInsecureWEP ? AUTH_WEP : AUTH_WPA_PSK; if (strlen(passphrase) == 64) // it's not a passphrase, is the PSK, which is copied into conf.password without null term @@ -524,7 +526,10 @@ wl_status_t ESP8266WiFiSTAClass::status() { String ESP8266WiFiSTAClass::SSID() const { struct station_config conf; wifi_station_get_config(&conf); - return String(reinterpret_cast(conf.ssid)); + char tmp[33]; //ssid can be up to 32chars, => plus null term + memcpy(tmp, conf.ssid, sizeof(conf.ssid)); + tmp[32] = 0; //nullterm in case of 32 char ssid + return String(reinterpret_cast(tmp)); } /** diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp index 6ce8d3d2c0..d1d507a759 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiScan.cpp @@ -186,8 +186,11 @@ String ESP8266WiFiScanClass::SSID(uint8_t i) { if(!it) { return ""; } + char tmp[33]; //ssid can be up to 32chars, => plus null term + memcpy(tmp, it->ssid, sizeof(it->ssid)); + tmp[32] = 0; //nullterm in case of 32 char ssid - return String(reinterpret_cast(it->ssid)); + return String(reinterpret_cast(tmp)); }