From 95133d28ed6828118bcf129ed9624cd18bd573c5 Mon Sep 17 00:00:00 2001 From: Peter L Jones Date: Tue, 1 Jun 2021 08:55:23 +0100 Subject: [PATCH] Prevent illegal server info from GUI --- src/serverdlg.cpp | 37 ++++++++++++++++++++++--------------- src/serverdlg.h | 2 ++ src/settings.cpp | 8 ++++---- src/settings.h | 4 +++- 4 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/serverdlg.cpp b/src/serverdlg.cpp index 3388579ba6..8ee6ded51f 100644 --- a/src/serverdlg.cpp +++ b/src/serverdlg.cpp @@ -30,7 +30,8 @@ CServerDlg::CServerDlg ( CServer* pNServP, CServerSettings* pNSetP, const bool b pServer ( pNServP ), pSettings ( pNSetP ), BitmapSystemTrayInactive ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDGreyArrow.png" ) ), - BitmapSystemTrayActive ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDGreenArrow.png" ) ) + BitmapSystemTrayActive ( QString::fromUtf8 ( ":/png/LEDs/res/CLEDGreenArrow.png" ) ), + reSvrInfoRemove ( QRegExp ( "[;\n]" ) ) { // check if system tray icon can be used bSystemTrayIconAvaialbe = SystemTrayIcon.isSystemTrayAvailable(); @@ -491,33 +492,39 @@ void CServerDlg::OnCentralServerAddressEditingFinished() void CServerDlg::OnServerNameTextChanged ( const QString& strNewName ) { - // check length - if ( strNewName.length() <= MAX_LEN_SERVER_NAME ) + // check content + if ( QString ( strNewName ).remove ( reSvrInfoRemove ) == strNewName && strNewName.length() <= MAX_LEN_SERVER_NAME ) { - // apply new setting to the server and update it - pServer->SetServerName ( strNewName ); - pServer->UpdateServerList(); + if ( strNewName != pServer->GetServerName() ) + { + // apply new setting to the server and update it + pServer->SetServerName ( QString ( strNewName ).remove ( reSvrInfoRemove ) ); + pServer->UpdateServerList(); + } } else { - // text is too long, update control with shortened text - edtServerName->setText ( strNewName.left ( MAX_LEN_SERVER_NAME ) ); + // text is invalid: update control with shortened, cleaned text + edtServerName->setText ( QString ( strNewName ).remove ( reSvrInfoRemove ).left ( MAX_LEN_SERVER_NAME ) ); } } void CServerDlg::OnLocationCityTextChanged ( const QString& strNewCity ) { - // check length - if ( strNewCity.length() <= MAX_LEN_SERVER_CITY ) + // check content + if ( QString ( strNewCity ).remove ( reSvrInfoRemove ) == strNewCity && strNewCity.length() <= MAX_LEN_SERVER_CITY ) { - // apply new setting to the server and update it - pServer->SetServerCity ( strNewCity ); - pServer->UpdateServerList(); + if ( strNewCity != pServer->GetServerCity() ) + { + // apply new setting to the server and update it + pServer->SetServerCity ( QString ( strNewCity ).remove ( reSvrInfoRemove ) ); + pServer->UpdateServerList(); + } } else { - // text is too long, update control with shortened text - edtLocationCity->setText ( strNewCity.left ( MAX_LEN_SERVER_CITY ) ); + // text is invalid: update control with shortened, cleaned text + edtLocationCity->setText ( QString ( strNewCity ).remove ( reSvrInfoRemove ).left ( MAX_LEN_SERVER_CITY ) ); } } diff --git a/src/serverdlg.h b/src/serverdlg.h index 00606c126f..eb0e7d1f6c 100644 --- a/src/serverdlg.h +++ b/src/serverdlg.h @@ -93,6 +93,8 @@ class CServerDlg : public CBaseDlg, private Ui_CServerDlgBase QPixmap BitmapSystemTrayActive; QMenu* pSystemTrayIconMenu; + const QRegExp reSvrInfoRemove; + public slots: void OnRegisterServerStateChanged ( int value ); void OnStartOnOSStartStateChanged ( int value ); diff --git a/src/settings.cpp b/src/settings.cpp index fb22ceed1d..6e3e529b61 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -754,10 +754,10 @@ if ( GetFlagIniSet ( IniXMLDocument, "server", "defcentservaddr", bValue ) ) if ( !CommandLineOptions.contains ( "--serverinfo" ) ) { // name - pServer->SetServerName ( GetIniSetting ( IniXMLDocument, "server", "name" ) ); + pServer->SetServerName ( GetIniSetting ( IniXMLDocument, "server", "name" ).remove ( reSvrInfoRemove ) ); // city - pServer->SetServerCity ( GetIniSetting ( IniXMLDocument, "server", "city" ) ); + pServer->SetServerCity ( GetIniSetting ( IniXMLDocument, "server", "city" ).remove ( reSvrInfoRemove ) ); // country if ( GetNumericIniSet ( IniXMLDocument, "server", "country", 0, static_cast ( QLocale::LastCountry ), iValue ) ) @@ -824,10 +824,10 @@ void CServerSettings::WriteSettingsToXML ( QDomDocument& IniXMLDocument ) PutIniSetting ( IniXMLDocument, "server", "language", strLanguage ); // name - PutIniSetting ( IniXMLDocument, "server", "name", pServer->GetServerName() ); + PutIniSetting ( IniXMLDocument, "server", "name", pServer->GetServerName().remove ( reSvrInfoRemove ) ); // city - PutIniSetting ( IniXMLDocument, "server", "city", pServer->GetServerCity() ); + PutIniSetting ( IniXMLDocument, "server", "city", pServer->GetServerCity().remove ( reSvrInfoRemove ) ); // country SetNumericIniSet ( IniXMLDocument, "server", "country", static_cast ( pServer->GetServerCountry() ) ); diff --git a/src/settings.h b/src/settings.h index 765b6ee115..44f6757235 100644 --- a/src/settings.h +++ b/src/settings.h @@ -181,7 +181,7 @@ class CClientSettings : public CSettings class CServerSettings : public CSettings { public: - CServerSettings ( CServer* pNSerP, const QString& sNFiName ) : CSettings(), pServer ( pNSerP ) + CServerSettings ( CServer* pNSerP, const QString& sNFiName ) : CSettings(), pServer ( pNSerP ), reSvrInfoRemove ( QRegExp ( "[;\n]" ) ) { SetFileName ( sNFiName, DEFAULT_INI_FILE_NAME_SERVER ); } @@ -191,4 +191,6 @@ class CServerSettings : public CSettings virtual void ReadSettingsFromXML ( const QDomDocument& IniXMLDocument, const QList& CommandLineOptions ) override; CServer* pServer; + + const QRegExp reSvrInfoRemove; };