From 29e577d966ae48810507c7a016ff1489a5843b2c Mon Sep 17 00:00:00 2001 From: agalq13 <71724834+agalq13@users.noreply.github.com> Date: Thu, 11 Jun 2026 12:35:30 +0300 Subject: [PATCH] NetPlay: Validate controller packet indices --- Source/Core/Core/NetPlayServer.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/NetPlayServer.cpp b/Source/Core/Core/NetPlayServer.cpp index d26cc399c1..f37bc4200c 100644 --- a/Source/Core/Core/NetPlayServer.cpp +++ b/Source/Core/Core/NetPlayServer.cpp @@ -192,6 +192,12 @@ static void ClearPeerPlayerId(ENetPeer* peer) } } +template +static bool IsValidPadIndex(const T& map_array, PadIndex index) +{ + return index >= 0 && static_cast(index) < map_array.size(); +} + void NetPlayServer::SetupIndex() { if (!Config::Get(Config::NETPLAY_USE_INDEX) || Config::Get(Config::NETPLAY_INDEX_NAME).empty() || @@ -814,7 +820,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) // If the data is not from the correct player, // then disconnect them. - if (m_pad_map.at(map) != player.pid) + if (!IsValidPadIndex(m_pad_map, map) || m_pad_map.at(map) != player.pid) { return 1; } @@ -862,6 +868,9 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) PadIndex map; packet >> map; + if (!IsValidPadIndex(m_pad_map, map)) + return 1; + GCPadStatus pad; packet >> pad.button; spac << map << pad.button; @@ -895,7 +904,7 @@ unsigned int NetPlayServer::OnData(sf::Packet& packet, Client& player) // If the data is not from the correct player, // then disconnect them. - if (m_wiimote_map.at(map) != player.pid) + if (!IsValidPadIndex(m_wiimote_map, map) || m_wiimote_map.at(map) != player.pid) { return 1; }