From d143e146945e42f4b6ce502615e971f6a4bc18ea Mon Sep 17 00:00:00 2001 From: Jon Evans <jon@craftyjon.com> Date: Fri, 3 Jul 2020 22:34:16 -0400 Subject: [PATCH] Fix memory leaks in color theme editor Fixes https://gitlab.com/kicad/code/kicad/-/issues/4794 --- common/settings/color_settings.cpp | 22 +++++++++++++++++++ .../dialogs/panel_eeschema_color_settings.cpp | 2 ++ include/settings/color_settings.h | 8 +++++++ 3 files changed, 32 insertions(+) diff --git a/common/settings/color_settings.cpp b/common/settings/color_settings.cpp index c2eddaa27a..40c43a6362 100644 --- a/common/settings/color_settings.cpp +++ b/common/settings/color_settings.cpp @@ -211,6 +211,28 @@ COLOR_SETTINGS::COLOR_SETTINGS( std::string aFilename ) : } +COLOR_SETTINGS::COLOR_SETTINGS( const COLOR_SETTINGS& aOther ) : + JSON_SETTINGS( aOther.m_filename, SETTINGS_LOC::COLORS, colorsSchemaVersion ) +{ + m_displayName = aOther.m_displayName; + m_overrideSchItemColors = aOther.m_overrideSchItemColors; + m_colors = aOther.m_colors; + m_defaultColors = aOther.m_defaultColors; +} + + +COLOR_SETTINGS& COLOR_SETTINGS::operator=( const COLOR_SETTINGS &aOther ) +{ + m_filename = aOther.m_filename; + m_displayName = aOther.m_displayName; + m_overrideSchItemColors = aOther.m_overrideSchItemColors; + m_colors = aOther.m_colors; + m_defaultColors = aOther.m_defaultColors; + + return *this; +} + + bool COLOR_SETTINGS::MigrateFromLegacy( wxConfigBase* aCfg ) { return false; diff --git a/eeschema/dialogs/panel_eeschema_color_settings.cpp b/eeschema/dialogs/panel_eeschema_color_settings.cpp index 7e8e86812b..8c6cbd580f 100644 --- a/eeschema/dialogs/panel_eeschema_color_settings.cpp +++ b/eeschema/dialogs/panel_eeschema_color_settings.cpp @@ -105,6 +105,8 @@ PANEL_EESCHEMA_COLOR_SETTINGS::~PANEL_EESCHEMA_COLOR_SETTINGS() { delete m_page; delete m_titleBlock; + delete m_ws; + delete m_currentSettings; for( EDA_ITEM* item : m_previewItems ) delete item; diff --git a/include/settings/color_settings.h b/include/settings/color_settings.h index 8f1fbac266..987e236a84 100644 --- a/include/settings/color_settings.h +++ b/include/settings/color_settings.h @@ -64,6 +64,14 @@ public: virtual ~COLOR_SETTINGS() {} + /** + * Copy ctor provided for temporary manipulation of themes in the theme editor. + * This will not copy the JSON_SETTINGS underlying data. + */ + COLOR_SETTINGS( const COLOR_SETTINGS& aOther ); + + COLOR_SETTINGS& operator=( const COLOR_SETTINGS &aOther ); + bool MigrateFromLegacy( wxConfigBase* aCfg ) override; bool Migrate() override;