Truncate all files we open to fix #240

Otherwise it's possible to leave bytes related to a previous version
of the file in tact, tailing the newly written content.
This in turn leads to malformed json when tokens are rewritten.
This commit is contained in:
Sebastian Thiel
2019-09-16 07:53:15 +02:00
parent 11db47ca2a
commit eb3a6ef578

View File

@@ -404,7 +404,7 @@ pub fn writer_from_opts(arg: Option<&str>) -> Result<Box<Write>, io::Error> {
let f = arg.unwrap_or("-");
match f {
"-" => Ok(Box::new(stdout())),
_ => match fs::OpenOptions::new().create(true).write(true).open(f) {
_ => match fs::OpenOptions::new().create(true).truncate(true).write(true).open(f) {
Ok(f) => Ok(Box::new(f)),
Err(io_err) => Err(io_err),
},
@@ -486,7 +486,7 @@ impl TokenStorage for JsonTokenStorage {
}
}
Some(token) => {
match fs::OpenOptions::new().create(true).write(true).open(&self.path(scope_hash)) {
match fs::OpenOptions::new().create(true).write(true).truncate(true).open(&self.path(scope_hash)) {
Ok(mut f) => {
match json::to_writer_pretty(&mut f, &token) {
Ok(_) => Ok(()),
@@ -767,6 +767,7 @@ pub fn application_secret_from_directory(dir: &str,
err = match fs::OpenOptions::new()
.create(true)
.write(true)
.truncate(true)
.open(&secret_path) {
Err(cfe) => cfe,
Ok(mut f) => {