mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	fix(WiFi): Fix strncpy missing NULL terminator [-Werror=stringop-truncation] (#7668)
This commit is contained in:
		| @@ -297,8 +297,8 @@ void WiFiComponent::set_sta(const WiFiAP &ap) { | |||||||
| void WiFiComponent::clear_sta() { this->sta_.clear(); } | void WiFiComponent::clear_sta() { this->sta_.clear(); } | ||||||
| void WiFiComponent::save_wifi_sta(const std::string &ssid, const std::string &password) { | void WiFiComponent::save_wifi_sta(const std::string &ssid, const std::string &password) { | ||||||
|   SavedWifiSettings save{}; |   SavedWifiSettings save{}; | ||||||
|   strncpy(save.ssid, ssid.c_str(), sizeof(save.ssid)); |   snprintf(save.ssid, sizeof(save.ssid), "%s", ssid.c_str()); | ||||||
|   strncpy(save.password, password.c_str(), sizeof(save.password)); |   snprintf(save.password, sizeof(save.password), "%s", password.c_str()); | ||||||
|   this->pref_.save(&save); |   this->pref_.save(&save); | ||||||
|   // ensure it's written immediately |   // ensure it's written immediately | ||||||
|   global_preferences->sync(); |   global_preferences->sync(); | ||||||
|   | |||||||
| @@ -137,8 +137,8 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) { | |||||||
|   // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html#_CPPv417wifi_sta_config_t |   // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html#_CPPv417wifi_sta_config_t | ||||||
|   wifi_config_t conf; |   wifi_config_t conf; | ||||||
|   memset(&conf, 0, sizeof(conf)); |   memset(&conf, 0, sizeof(conf)); | ||||||
|   strncpy(reinterpret_cast<char *>(conf.sta.ssid), ap.get_ssid().c_str(), sizeof(conf.sta.ssid)); |   snprintf(reinterpret_cast<char *>(conf.sta.ssid), sizeof(conf.sta.ssid), "%s", ap.get_ssid().c_str()); | ||||||
|   strncpy(reinterpret_cast<char *>(conf.sta.password), ap.get_password().c_str(), sizeof(conf.sta.password)); |   snprintf(reinterpret_cast<char *>(conf.sta.password), sizeof(conf.sta.password), "%s", ap.get_password().c_str()); | ||||||
|  |  | ||||||
|   // The weakest authmode to accept in the fast scan mode |   // The weakest authmode to accept in the fast scan mode | ||||||
|   if (ap.get_password().empty()) { |   if (ap.get_password().empty()) { | ||||||
| @@ -746,7 +746,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) { | |||||||
|  |  | ||||||
|   wifi_config_t conf; |   wifi_config_t conf; | ||||||
|   memset(&conf, 0, sizeof(conf)); |   memset(&conf, 0, sizeof(conf)); | ||||||
|   strncpy(reinterpret_cast<char *>(conf.ap.ssid), ap.get_ssid().c_str(), sizeof(conf.ap.ssid)); |   snprintf(reinterpret_cast<char *>(conf.ap.ssid), sizeof(conf.ap.ssid), "%s", ap.get_ssid().c_str()); | ||||||
|   conf.ap.channel = ap.get_channel().value_or(1); |   conf.ap.channel = ap.get_channel().value_or(1); | ||||||
|   conf.ap.ssid_hidden = ap.get_ssid().size(); |   conf.ap.ssid_hidden = ap.get_ssid().size(); | ||||||
|   conf.ap.max_connection = 5; |   conf.ap.max_connection = 5; | ||||||
| @@ -757,7 +757,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) { | |||||||
|     *conf.ap.password = 0; |     *conf.ap.password = 0; | ||||||
|   } else { |   } else { | ||||||
|     conf.ap.authmode = WIFI_AUTH_WPA2_PSK; |     conf.ap.authmode = WIFI_AUTH_WPA2_PSK; | ||||||
|     strncpy(reinterpret_cast<char *>(conf.ap.password), ap.get_password().c_str(), sizeof(conf.ap.password)); |     snprintf(reinterpret_cast<char *>(conf.ap.password), sizeof(conf.ap.password), "%s", ap.get_password().c_str()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   // pairwise cipher of SoftAP, group cipher will be derived using this. |   // pairwise cipher of SoftAP, group cipher will be derived using this. | ||||||
|   | |||||||
| @@ -236,8 +236,8 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) { | |||||||
|  |  | ||||||
|   struct station_config conf {}; |   struct station_config conf {}; | ||||||
|   memset(&conf, 0, sizeof(conf)); |   memset(&conf, 0, sizeof(conf)); | ||||||
|   strncpy(reinterpret_cast<char *>(conf.ssid), ap.get_ssid().c_str(), sizeof(conf.ssid)); |   snprintf(reinterpret_cast<char *>(conf.ssid), sizeof(conf.ssid), "%s", ap.get_ssid().c_str()); | ||||||
|   strncpy(reinterpret_cast<char *>(conf.password), ap.get_password().c_str(), sizeof(conf.password)); |   snprintf(reinterpret_cast<char *>(conf.password), sizeof(conf.password), "%s", ap.get_password().c_str()); | ||||||
|  |  | ||||||
|   if (ap.get_bssid().has_value()) { |   if (ap.get_bssid().has_value()) { | ||||||
|     conf.bssid_set = 1; |     conf.bssid_set = 1; | ||||||
| @@ -775,7 +775,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) { | |||||||
|     return false; |     return false; | ||||||
|  |  | ||||||
|   struct softap_config conf {}; |   struct softap_config conf {}; | ||||||
|   strncpy(reinterpret_cast<char *>(conf.ssid), ap.get_ssid().c_str(), sizeof(conf.ssid)); |   snprintf(reinterpret_cast<char *>(conf.ssid), sizeof(conf.ssid), "%s", ap.get_ssid().c_str()); | ||||||
|   conf.ssid_len = static_cast<uint8>(ap.get_ssid().size()); |   conf.ssid_len = static_cast<uint8>(ap.get_ssid().size()); | ||||||
|   conf.channel = ap.get_channel().value_or(1); |   conf.channel = ap.get_channel().value_or(1); | ||||||
|   conf.ssid_hidden = ap.get_hidden(); |   conf.ssid_hidden = ap.get_hidden(); | ||||||
| @@ -787,7 +787,7 @@ bool WiFiComponent::wifi_start_ap_(const WiFiAP &ap) { | |||||||
|     *conf.password = 0; |     *conf.password = 0; | ||||||
|   } else { |   } else { | ||||||
|     conf.authmode = AUTH_WPA2_PSK; |     conf.authmode = AUTH_WPA2_PSK; | ||||||
|     strncpy(reinterpret_cast<char *>(conf.password), ap.get_password().c_str(), sizeof(conf.password)); |     snprintf(reinterpret_cast<char *>(conf.password), sizeof(conf.password), "%s", ap.get_password().c_str()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   ETS_UART_INTR_DISABLE(); |   ETS_UART_INTR_DISABLE(); | ||||||
|   | |||||||
| @@ -289,8 +289,8 @@ bool WiFiComponent::wifi_sta_connect_(const WiFiAP &ap) { | |||||||
|   // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html#_CPPv417wifi_sta_config_t |   // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_wifi.html#_CPPv417wifi_sta_config_t | ||||||
|   wifi_config_t conf; |   wifi_config_t conf; | ||||||
|   memset(&conf, 0, sizeof(conf)); |   memset(&conf, 0, sizeof(conf)); | ||||||
|   strncpy(reinterpret_cast<char *>(conf.sta.ssid), ap.get_ssid().c_str(), sizeof(conf.sta.ssid)); |   snprintf(reinterpret_cast<char *>(conf.sta.ssid), sizeof(conf.sta.ssid), "%s", ap.get_ssid().c_str()); | ||||||
|   strncpy(reinterpret_cast<char *>(conf.sta.password), ap.get_password().c_str(), sizeof(conf.sta.password)); |   snprintf(reinterpret_cast<char *>(conf.sta.password), sizeof(conf.sta.password), "%s", ap.get_password().c_str()); | ||||||
|  |  | ||||||
|   // The weakest authmode to accept in the fast scan mode |   // The weakest authmode to accept in the fast scan mode | ||||||
|   if (ap.get_password().empty()) { |   if (ap.get_password().empty()) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user