DolphinQt / InputCommon - add DSU string validator to avoid crashes, limited backwards compatibility support

This commit is contained in:
iwubcode
2020-07-13 00:26:43 -05:00
parent 58aa0150e1
commit 97c9cf3e21
8 changed files with 86 additions and 0 deletions

View File

@ -14,9 +14,11 @@
#include <QLineEdit>
#include <QPushButton>
#include <QSpinBox>
#include <QString>
#include <QWidget>
#include "Common/Config/Config.h"
#include "DolphinQt/Config/ControllerInterface/ServerStringValidator.h"
#include "InputCommon/ControllerInterface/DualShockUDPClient/DualShockUDPClient.h"
DualShockUDPClientAddServerDialog::DualShockUDPClientAddServerDialog(QWidget* parent)
@ -35,9 +37,11 @@ void DualShockUDPClientAddServerDialog::CreateWidgets()
m_description = new QLineEdit();
m_description->setPlaceholderText(tr("BetterJoy, DS4Windows, etc"));
m_description->setValidator(new ServerStringValidator(m_description));
m_server_address =
new QLineEdit(QString::fromStdString(ciface::DualShockUDPClient::DEFAULT_SERVER_ADDRESS));
m_server_address->setValidator(new ServerStringValidator(m_server_address));
m_server_port = new QSpinBox();
m_server_port->setMaximum(65535);

View File

@ -75,6 +75,22 @@ void DualShockUDPClientWidget::RefreshServerList()
{
m_server_list->clear();
const auto server_address_setting =
Config::Get(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS);
const auto server_port_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVER_PORT);
// Update our servers setting if the user is using old configuration
if (!server_address_setting.empty() && server_port_setting != 0)
{
const auto& servers_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVERS);
Config::SetBaseOrCurrent(ciface::DualShockUDPClient::Settings::SERVERS,
servers_setting + fmt::format("{}:{}:{};", "DS4",
server_address_setting,
server_port_setting));
Config::SetBase(ciface::DualShockUDPClient::Settings::SERVER_ADDRESS, "");
Config::SetBase(ciface::DualShockUDPClient::Settings::SERVER_PORT, 0);
}
const auto& servers_setting = Config::Get(ciface::DualShockUDPClient::Settings::SERVERS);
const auto server_details = SplitString(servers_setting, ';');
for (const std::string& server_detail : server_details)

View File

@ -0,0 +1,23 @@
// Copyright 2020 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#include "DolphinQt/Config/ControllerInterface/ServerStringValidator.h"
ServerStringValidator::ServerStringValidator(QObject* parent) : QValidator(parent)
{
}
QValidator::State ServerStringValidator::validate(QString& input, int& pos) const
{
if (input.isEmpty())
return Invalid;
if (input.contains(QStringLiteral(":")))
return Invalid;
if (input.contains(QStringLiteral(";")))
return Invalid;
return Acceptable;
}

View File

@ -0,0 +1,16 @@
// Copyright 2020 Dolphin Emulator Project
// Licensed under GPLv2+
// Refer to the license.txt file included.
#pragma once
#include <QValidator>
class ServerStringValidator : public QValidator
{
Q_OBJECT
public:
explicit ServerStringValidator(QObject* parent);
State validate(QString& input, int& pos) const override;
};