summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2026-05-30 17:14:18 +0200
committerJosJuice <josjuice@gmail.com>2026-06-14 14:47:17 +0200
commit32eaf7961f0f76a49fe397de927b088bebd408e4 (patch)
treece53ee9d569307d666331c06594351a44027b333
parentaabea5b1e3f13177aa302f99b435a70ad6a9b0b1 (diff)
NetPlayClient: Check for invalid pad indices
Like 29e577d but for the client instead of the server.
-rw-r--r--Source/Core/Core/NetPlayClient.cpp36
1 files changed, 20 insertions, 16 deletions
diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp
index 6231273c8a..8c38fc0b53 100644
--- a/Source/Core/Core/NetPlayClient.cpp
+++ b/Source/Core/Core/NetPlayClient.cpp
@@ -680,16 +680,17 @@ void NetPlayClient::OnPadData(sf::Packet& packet)
GCPadStatus pad;
packet >> pad.button;
- if (!m_gba_config.at(map).enabled)
+ if (static_cast<size_t>(map) < m_gba_config.size() && !m_gba_config.at(map).enabled)
{
packet >> pad.analogA >> pad.analogB >> pad.stickX >> pad.stickY >> pad.substickX >>
pad.substickY >> pad.triggerLeft >> pad.triggerRight >> pad.isConnected;
}
- // Trusting server for good map value (>=0 && <4)
- // add to pad buffer
- m_pad_buffer.at(map).Push(pad);
- m_gc_pad_event.Set();
+ if (static_cast<size_t>(map) < m_pad_buffer.size())
+ {
+ m_pad_buffer.at(map).Push(pad);
+ m_gc_pad_event.Set();
+ }
}
}
@@ -702,20 +703,22 @@ void NetPlayClient::OnPadHostData(sf::Packet& packet)
GCPadStatus pad;
packet >> pad.button;
- if (!m_gba_config.at(map).enabled)
+ if (static_cast<size_t>(map) < m_gba_config.size() && !m_gba_config.at(map).enabled)
{
packet >> pad.analogA >> pad.analogB >> pad.stickX >> pad.stickY >> pad.substickX >>
pad.substickY >> pad.triggerLeft >> pad.triggerRight >> pad.isConnected;
}
- // Trusting server for good map value (>=0 && <4)
- // write to last status
- m_last_pad_status[map] = pad;
+ if (static_cast<size_t>(map) < m_last_pad_status.size())
+ m_last_pad_status[map] = pad;
- if (!m_first_pad_status_received[map])
+ if (static_cast<size_t>(map) < m_first_pad_status_received.size())
{
- m_first_pad_status_received[map] = true;
- m_first_pad_status_received_event.Set();
+ if (!m_first_pad_status_received[map])
+ {
+ m_first_pad_status_received[map] = true;
+ m_first_pad_status_received_event.Set();
+ }
}
}
}
@@ -740,10 +743,11 @@ void NetPlayClient::OnWiimoteData(sf::Packet& packet)
pad.length = 0;
}
- // Trusting server for good map value (>=0 && <4)
- // add to pad buffer
- m_wiimote_buffer.at(map).Push(pad);
- m_wii_pad_event.Set();
+ if (static_cast<size_t>(map) < m_wiimote_buffer.size())
+ {
+ m_wiimote_buffer.at(map).Push(pad);
+ m_wii_pad_event.Set();
+ }
}
}