diff --git a/src/include/datastorage.h b/src/include/datastorage.h index 043047f..b4953f8 100644 --- a/src/include/datastorage.h +++ b/src/include/datastorage.h @@ -227,7 +227,7 @@ typedef struct ap_s { uint32_t channel_utilization; // eval_probe_metric() time_t time; // remove_old...entries uint32_t station_count; // compare_station_count() <- better_ap_available() - uint8_t ssid[SSID_MAX_LEN]; // compare_sid() < -better_ap_available() + uint8_t ssid[SSID_MAX_LEN + 1]; // compare_sid() < -better_ap_available() char neighbor_report[NEIGHBOR_REPORT_LEN]; uint32_t collision_domain; // TODO: ap_get_collision_count() never evaluated? uint32_t bandwidth; // TODO: Never evaluated? diff --git a/src/test/test_storage.c b/src/test/test_storage.c index 4b4ef6a..543a9a1 100644 --- a/src/test/test_storage.c +++ b/src/test/test_storage.c @@ -697,7 +697,7 @@ static int consume_actions(int argc, char* argv[], int harness_verbosity) ap0->time = faketime; ap0->station_count = 0; memset(ap0->ssid, '*', SSID_MAX_LEN); - ap0->ssid[SSID_MAX_LEN - 1] = '\0'; + ap0->ssid[SSID_MAX_LEN] = '\0'; ap0->neighbor_report[0] = 0; ap0->collision_domain = 0; ap0->bandwidth = 0; diff --git a/src/utils/dawn_iwinfo.c b/src/utils/dawn_iwinfo.c index 3ad3918..02d206e 100644 --- a/src/utils/dawn_iwinfo.c +++ b/src/utils/dawn_iwinfo.c @@ -281,8 +281,7 @@ int get_ssid(const char *ifname, char* ssid, size_t ssidmax) { if (iw->ssid(ifname, buf)) memset(buf, 0, sizeof(buf)); - memcpy(ssid, buf, ssidmax); - strcpy(ssid, buf); + strncpy(ssid, buf, ssidmax); iwinfo_finish(); return 0; } diff --git a/src/utils/ubus.c b/src/utils/ubus.c index 3f2b799..c8153b0 100644 --- a/src/utils/ubus.c +++ b/src/utils/ubus.c @@ -96,7 +96,7 @@ struct hostapd_sock_entry { char iface_name[MAX_INTERFACE_NAME]; char hostname[HOST_NAME_MAX]; struct dawn_mac bssid_addr; - char ssid[SSID_MAX_LEN]; + char ssid[SSID_MAX_LEN + 1]; uint8_t ht_support; uint8_t vht_support; uint64_t last_channel_time; @@ -1214,6 +1214,7 @@ bool subscribe(struct hostapd_sock_entry *hostapd_entry) { get_bssid(hostapd_entry->iface_name, hostapd_entry->bssid_addr.u8); get_ssid(hostapd_entry->iface_name, hostapd_entry->ssid, (SSID_MAX_LEN) * sizeof(char)); + hostapd_entry->ssid[SSID_MAX_LEN] = '\0'; hostapd_entry->ht_support = (uint8_t) support_ht(hostapd_entry->iface_name); hostapd_entry->vht_support = (uint8_t) support_vht(hostapd_entry->iface_name);