From 0abdedf9694f84730c2cb90c57947ef411770457 Mon Sep 17 00:00:00 2001 From: ardocrat Date: Mon, 1 May 2023 14:07:47 +0300 Subject: [PATCH 1/2] Handle parsing error at config to prevent panic --- config/src/config.rs | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/config/src/config.rs b/config/src/config.rs index 314573c59..9e2db84fb 100644 --- a/config/src/config.rs +++ b/config/src/config.rs @@ -224,7 +224,16 @@ impl GlobalConfig { fn read_config(mut self) -> Result { let config_file_path = self.config_file_path.as_ref().unwrap(); let contents = fs::read_to_string(config_file_path)?; - let migrated = GlobalConfig::migrate_config_file_version_none_to_2(contents.clone()); + let migrated_content = self.migrate_config_file_version_none_to_2(contents.clone()); + let migrated: String = match migrated_content { + Ok(m) => m, + Err(e) => { + return Err(ConfigError::ParseError( + self.config_file_path.unwrap().to_str().unwrap().to_string(), + format!("{}", e), + )); + } + }; if contents != migrated { fs::write(config_file_path, &migrated)?; } @@ -313,13 +322,31 @@ impl GlobalConfig { /// - Adds "config_file_version = 2" /// - If server.pool_config.accept_fee_base is 1000000, change it to 500000 /// - Remove "#a setting to 1000000 will be overridden to 500000 to respect the fixfees RFC" - fn migrate_config_file_version_none_to_2(config_str: String) -> String { + fn migrate_config_file_version_none_to_2( + &self, + config_str: String, + ) -> Result { // Parse existing config and return unchanged if not eligible for migration - let mut config: ConfigMembers = - toml::from_str(&GlobalConfig::fix_warning_level(config_str.clone())).unwrap(); + let mut config_members: Result = + toml::from_str(&GlobalConfig::fix_warning_level(config_str.clone())); + let mut config: ConfigMembers = match config_members { + Ok(p) => p, + Err(e) => { + return Err(ConfigError::ParseError( + self.config_file_path + .as_ref() + .unwrap() + .to_str() + .unwrap() + .to_string(), + format!("{}", e), + )); + } + }; + if config.config_file_version != None { - return config_str; + return Ok(config_str); } // Apply changes both textually and structurally @@ -347,7 +374,7 @@ impl GlobalConfig { toml::from_str(&GlobalConfig::fix_warning_level(config_str.clone())).unwrap() ); - config_str + Ok(config_str) } // For forwards compatibility old config needs `Warning` log level changed to standard log::Level `WARN` From d45280ce77099cf3f6a2a3e406f2dcc042dc7589 Mon Sep 17 00:00:00 2001 From: ardocrat Date: Mon, 1 May 2023 14:32:10 +0300 Subject: [PATCH 2/2] Removed unused mut from config_members --- config/src/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/src/config.rs b/config/src/config.rs index 9e2db84fb..156a13411 100644 --- a/config/src/config.rs +++ b/config/src/config.rs @@ -328,7 +328,7 @@ impl GlobalConfig { ) -> Result { // Parse existing config and return unchanged if not eligible for migration - let mut config_members: Result = + let config_members: Result = toml::from_str(&GlobalConfig::fix_warning_level(config_str.clone())); let mut config: ConfigMembers = match config_members { Ok(p) => p,