diff --git a/network/netplay/netplay.h b/network/netplay/netplay.h index 5a9bfac6b1..50b0eaa29a 100644 --- a/network/netplay/netplay.h +++ b/network/netplay/netplay.h @@ -191,7 +191,7 @@ struct netplay_host_list struct netplay_mitm_pending { int *fds; - uint8_t *ids[NETPLAY_MITM_ID_SIZE]; + uint8_t *ids[NETPLAY_MITM_MAX_PENDING]; retro_time_t *timeouts; int current; diff --git a/network/netplay/netplay_frontend.c b/network/netplay/netplay_frontend.c index 5cb4aea7ee..ca87b8db4d 100644 --- a/network/netplay/netplay_frontend.c +++ b/network/netplay/netplay_frontend.c @@ -5832,11 +5832,15 @@ static int init_tcp_connection(const struct addrinfo *res, if (fds && ids && timeouts) { + size_t i; + memset(fds, -1, NETPLAY_MITM_MAX_PENDING * sizeof(*fds)); + for (i = 0; i < NETPLAY_MITM_MAX_PENDING; i++, ids += NETPLAY_MITM_ID_SIZE) + net_st->mitm_pending.ids[i] = ids; + net_st->mitm_pending.fds = fds; - net_st->mitm_pending.ids = ids; net_st->mitm_pending.timeouts = timeouts; net_st->mitm_pending.current = 0; @@ -7600,7 +7604,11 @@ void deinit_netplay(void) net_st->mitm_pending.fds = NULL; } if (net_st->mitm_pending.ids) - free(*net_st->mitm_pending.ids); + { + free(net_st->mitm_pending.ids[0]); + memset(net_st->mitm_pending.ids, 0, + sizeof(net_st->mitm_pending.ids)); + } if (net_st->mitm_pending.timeouts) { free(net_st->mitm_pending.timeouts);