From b15fd9269795eb929ea6cf7f2910a919978bb803 Mon Sep 17 00:00:00 2001 From: Jean-Francois Dockes Date: Mon, 11 Jan 2016 10:00:08 +0100 Subject: [PATCH] Missing ParamStale initialization would crash GUI when clicking Open after indexing config update. Fixes issue #284 --- src/common/rclconfig.cpp | 42 ++++++++++++++-------------------------- src/common/rclconfig.h | 2 ++ 2 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/common/rclconfig.cpp b/src/common/rclconfig.cpp index e69f76b6..638308ed 100644 --- a/src/common/rclconfig.cpp +++ b/src/common/rclconfig.cpp @@ -112,13 +112,7 @@ void RclConfig::zeroMe() { m_ptrans = 0; m_stopsuffixes = 0; m_maxsufflen = 0; - - m_oldstpsuffstate.init(0); - m_stpsuffstate.init(0); - m_skpnstate.init(0); - m_rmtstate.init(0); - m_xmtstate.init(0); - m_mdrstate.init(0); + initParamStale(0, 0); } bool RclConfig::isDefaultConfig() const @@ -281,12 +275,7 @@ RclConfig::RclConfig(const string *argcnf) m_ok = true; setKeyDir(cstr_null); - m_oldstpsuffstate.init(mimemap); - m_stpsuffstate.init(m_conf); - m_skpnstate.init(m_conf); - m_rmtstate.init(m_conf); - m_xmtstate.init(m_conf); - m_mdrstate.init(m_conf); + initParamStale(m_conf, mimemap); return; } @@ -302,20 +291,14 @@ bool RclConfig::updateMainConfig() stringsToString(m_cdirs, where); m_reason = string("No/bad main configuration file in: ") + where; m_ok = false; - m_skpnstate.init(0); - m_rmtstate.init(0); - m_xmtstate.init(0); - m_mdrstate.init(0); + initParamStale(0, 0); return false; } delete m_conf; m_conf = newconf; - m_skpnstate.init(m_conf); - m_rmtstate.init(m_conf); - m_xmtstate.init(m_conf); - m_mdrstate.init(m_conf); + initParamStale(m_conf, mimemap); setKeyDir(cstr_null); @@ -1498,16 +1481,21 @@ void RclConfig::initFrom(const RclConfig& r) m_maxsufflen = r.m_maxsufflen; m_defcharset = r.m_defcharset; - m_oldstpsuffstate.init(mimemap); - m_stpsuffstate.init(m_conf); - m_skpnstate.init(m_conf); - m_rmtstate.init(m_conf); - m_xmtstate.init(m_conf); - m_mdrstate.init(m_conf); + initParamStale(m_conf, mimemap); m_thrConf = r.m_thrConf; } +void RclConfig::initParamStale(ConfNull *cnf, ConfNull *mimemap) +{ + m_oldstpsuffstate.init(mimemap); + m_stpsuffstate.init(cnf); + m_skpnstate.init(cnf); + m_rmtstate.init(cnf); + m_xmtstate.init(cnf); + m_mdrstate.init(cnf); +} + #else // -> Test #include diff --git a/src/common/rclconfig.h b/src/common/rclconfig.h index 4a371d50..91117143 100644 --- a/src/common/rclconfig.h +++ b/src/common/rclconfig.h @@ -382,6 +382,8 @@ class RclConfig { /** Create initial user configuration */ bool initUserConfig(); + /** Init all ParamStale members */ + void initParamStale(ConfNull *cnf, ConfNull *mimemap); /** Copy from other */ void initFrom(const RclConfig& r); /** Init pointers to 0 */