From dfecb4ed1ff70c8f7797dd0c8a006f7eff83d0b7 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Tue, 14 Mar 2017 14:23:05 +0000 Subject: [PATCH] Fix defect in handling of configuration names containing ampersand characters git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7602 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- MultiSettings.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/MultiSettings.cpp b/MultiSettings.cpp index ae8301687..d2e2b1388 100644 --- a/MultiSettings.cpp +++ b/MultiSettings.cpp @@ -42,6 +42,11 @@ namespace char const * multi_settings_current_name_key = "CurrentName"; char const * multi_settings_place_holder_key = "MultiSettingsPlaceHolder"; + QString unescape_ampersands (QString s) + { + return s.replace ("&&", "&"); + } + // calculate a useable and unique settings file path QString settings_path () { @@ -425,7 +430,7 @@ void MultiSettings::impl::create_menu_actions (QMainWindow * main_window, QMenu if (name_change_emit_pending_) { - Q_EMIT parent_->configurationNameChanged (current_.replace (QRegularExpression {R"(&([^&]))"}, R"(\1)").replace ("&&", "&")); + Q_EMIT parent_->configurationNameChanged (unescape_ampersands (current_)); name_change_emit_pending_ = false; } } @@ -567,7 +572,7 @@ void MultiSettings::impl::select_configuration (QMainWindow * main_window, QMenu } // and set up the restart current_ = target_name; - Q_EMIT parent_->configurationNameChanged (current_); + Q_EMIT parent_->configurationNameChanged (unescape_ampersands (current_)); reposition_type_ = RepositionType::save_and_replace; exit_flag_ = false; main_window->close (); @@ -640,8 +645,8 @@ void MultiSettings::impl::clone_into_configuration (QMainWindow * main_window, Q if (MessageBox::Yes == MessageBox::query_message (main_window, tr ("Clone Into Configuration"), tr ("Confirm overwrite of all values for configuration \"%1\" with values from \"%2\"?") - .arg (target_name) - .arg (source_name))) + .arg (unescape_ampersands (target_name)) + .arg (unescape_ampersands (source_name)))) { // grab the data to clone from if (source_name == current_group_name) @@ -684,7 +689,7 @@ void MultiSettings::impl::reset_configuration (QMainWindow * main_window, QMenu if (MessageBox::Yes != MessageBox::query_message (main_window, tr ("Reset Configuration"), tr ("Confirm reset to default values for configuration \"%1\"?") - .arg (target_name))) + .arg (unescape_ampersands (target_name)))) { return; } @@ -732,7 +737,7 @@ void MultiSettings::impl::rename_configuration (QMainWindow * main_window, QMenu settings_.setValue (multi_settings_current_name_key, dialog.new_name ()); settings_.sync (); current_ = dialog.new_name (); - Q_EMIT parent_->configurationNameChanged (current_); + Q_EMIT parent_->configurationNameChanged (unescape_ampersands (current_)); } else { @@ -768,7 +773,7 @@ void MultiSettings::impl::delete_configuration (QMainWindow * main_window, QMenu if (MessageBox::Yes != MessageBox::query_message (main_window, tr ("Delete Configuration"), tr ("Confirm deletion of configuration \"%1\"?") - .arg (target_name))) + .arg (unescape_ampersands (target_name)))) { return; }