From 57eb3b2de4e015c94a6bdbb674dc1ec8c1c4fcc2 Mon Sep 17 00:00:00 2001 From: Arash Outadi Date: Sat, 10 Aug 2019 21:02:49 -0700 Subject: [PATCH 1/3] Add code path for invalid settings file --- voxygen/src/settings.rs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index df23337137..bcb4b0c181 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -233,13 +233,26 @@ impl Default for Settings { impl Settings { pub fn load() -> Self { let path = Settings::get_settings_path(); - - // If file doesn't exist, use the default settings. - if let Ok(file) = fs::File::open(path) { - ron::de::from_reader(file).expect("Error parsing settings") - } else { - Self::default() + + if let Ok(file) = fs::File::open(&path) { + match ron::de::from_reader(file) { + Ok(s) => s, + Err(e) => { + log::warn!("Failed to parse setting file! Fallback to default. {}", e); + // Rename the corrupted settings file + let mut new_path = path.to_owned(); + new_path.pop(); + new_path.push("settings.invalid.ron"); + if let Err(err) = std::fs::rename(path, new_path) { + log::warn!("Failed to rename settings file. {}", err); + } + } + } } + let default_settings = Self::default(); + default_settings.save_to_file_warn(); + default_settings + } pub fn save_to_file_warn(&self) { From b986603215358ca4b4c454b0fbc3fd48df5828aa Mon Sep 17 00:00:00 2001 From: Arash Outadi Date: Sun, 11 Aug 2019 12:18:18 -0700 Subject: [PATCH 2/3] Run cargo fmt --- voxygen/src/settings.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index bcb4b0c181..4a5f2ca0db 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -233,7 +233,7 @@ impl Default for Settings { impl Settings { pub fn load() -> Self { let path = Settings::get_settings_path(); - + if let Ok(file) = fs::File::open(&path) { match ron::de::from_reader(file) { Ok(s) => s, @@ -252,7 +252,6 @@ impl Settings { let default_settings = Self::default(); default_settings.save_to_file_warn(); default_settings - } pub fn save_to_file_warn(&self) { From 28250c9f14a3b81894434dced33c5399752a05f7 Mon Sep 17 00:00:00 2001 From: Imbris Date: Thu, 12 Sep 2019 23:37:28 -0400 Subject: [PATCH 3/3] Fix always returning the default settings --- voxygen/src/settings.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index 4a5f2ca0db..7e03831b18 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -236,7 +236,7 @@ impl Settings { if let Ok(file) = fs::File::open(&path) { match ron::de::from_reader(file) { - Ok(s) => s, + Ok(s) => return s, Err(e) => { log::warn!("Failed to parse setting file! Fallback to default. {}", e); // Rename the corrupted settings file @@ -249,6 +249,9 @@ impl Settings { } } } + // This is reached if either: + // - The file can't be opened (presumably it doesn't exist) + // - Or there was an error parsing the file let default_settings = Self::default(); default_settings.save_to_file_warn(); default_settings