Fixed: Check if profiles are correct before using them

This commit is contained in:
kervala 2016-10-11 17:43:53 +02:00
parent f77f8249f1
commit 2b19bbe241
3 changed files with 41 additions and 1 deletions

View file

@ -49,6 +49,29 @@ void CProfile::saveToSettings(QSettings &settings) const
settings.setValue("menu_shortcut", menuShortcut); settings.setValue("menu_shortcut", menuShortcut);
} }
bool CProfile::isValid(QString &error) const
{
QRegExp idReg("^[0-9a-z_]+$");
if (!idReg.exactMatch(id))
{
error = QApplication::tr("Profile ID %1 is using invalid characters (only lowercase letters, numbers and underscore are allowed)").arg(id);
return false;
}
QRegExp nameReg("[/\\\\<>?*:.%|\"]");
int pos = nameReg.indexIn(name);
if (pos > -1)
{
error = QApplication::tr("Profile name %1 is using invalid character %2 at position %3").arg(name).arg(name[pos]).arg(pos);
return false;
}
return true;
}
QString CProfile::getDirectory() const QString CProfile::getDirectory() const
{ {
return CConfigFile::getInstance()->getProfileDirectory() + "/" + id; return CConfigFile::getInstance()->getProfileDirectory() + "/" + id;
@ -105,7 +128,7 @@ void CProfile::createShortcuts() const
// create desktop shortcut // create desktop shortcut
if (!createShortcut(shortcut, name, exe, profileArguments, icon, workingDir)) if (!createShortcut(shortcut, name, exe, profileArguments, icon, workingDir))
{ {
qDebug() << "Unable to create desktop directory"; qDebug() << "Unable to create desktop shortcut";
} }
} }

View file

@ -40,6 +40,8 @@ public:
void loadFromSettings(const QSettings &settings); void loadFromSettings(const QSettings &settings);
void saveToSettings(QSettings &settings) const; void saveToSettings(QSettings &settings) const;
bool isValid(QString &error) const;
// helpers // helpers
QString getDirectory() const; QString getDirectory() const;
QString getClientFullPath() const; QString getClientFullPath() const;

View file

@ -56,6 +56,21 @@ void CProfilesDialog::accept()
{ {
saveProfile(m_currentProfileIndex); saveProfile(m_currentProfileIndex);
const CProfiles &profiles = m_model->getProfiles();
// check if profiles are valid
foreach(const CProfile &profile, profiles)
{
QString error;
if (!profile.isValid(error))
{
// display an error message
QMessageBox::critical(this, tr("Error"), error);
return;
}
}
m_model->save(); m_model->save();
QDialog::accept(); QDialog::accept();