diff --git a/Source/Core/Core/NetPlayClient.cpp b/Source/Core/Core/NetPlayClient.cpp index df54510e53..9a189ae3f7 100644 --- a/Source/Core/Core/NetPlayClient.cpp +++ b/Source/Core/Core/NetPlayClient.cpp @@ -754,8 +754,13 @@ void NetPlayClient::OnPadBuffer(sf::Packet& packet) u32 size = 0; packet >> size; - m_target_buffer_size = size; - m_dialog->OnPadBufferChanged(size); + if (size > MAX_TARGET_PAD_BUFFER_SIZE) + { + WARN_LOG_FMT(NETPLAY, "Ignoring invalid pad buffer size {}.", size); + return; + } + + AdjustPadBufferSize(size); } void NetPlayClient::OnHostInputAuthority(sf::Packet& packet) diff --git a/Source/Core/Core/NetPlayProto.h b/Source/Core/Core/NetPlayProto.h index 0cc897ebbd..0458e32237 100644 --- a/Source/Core/Core/NetPlayProto.h +++ b/Source/Core/Core/NetPlayProto.h @@ -244,6 +244,7 @@ enum class SyncCodeID : u8 }; constexpr u32 MAX_NAME_LENGTH = 30; +constexpr u32 MAX_TARGET_PAD_BUFFER_SIZE = 99; constexpr size_t CHUNKED_DATA_UNIT_SIZE = 16384; constexpr u32 MAX_ENET_MTU = 1392; // see https://github.com/lsalzman/enet/issues/132 diff --git a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp index 733ba76bd1..c4ebae425c 100644 --- a/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp +++ b/Source/Core/DolphinQt/NetPlay/NetPlayDialog.cpp @@ -33,6 +33,7 @@ #include "Common/Logging/Log.h" #include "Common/TraversalClient.h" #include "Core/NetPlayCommon.h" +#include "Core/NetPlayProto.h" #include "Core/Boot/Boot.h" #include "Core/Config/GraphicsSettings.h" @@ -130,6 +131,7 @@ void NetPlayDialog::CreateMainLayout() m_game_button = new QPushButton; m_start_button = new QPushButton(tr("Start")); m_buffer_size_box = new QSpinBox; + m_buffer_size_box->setMaximum(NetPlay::MAX_TARGET_PAD_BUFFER_SIZE); m_buffer_label = new QLabel(tr("Buffer:")); m_quit_button = new QPushButton(tr("Quit")); m_splitter = new QSplitter(Qt::Horizontal);