From bbaa8797337db58ad23ad7c76ef0b3b8ef32430f Mon Sep 17 00:00:00 2001 From: zhangsoledad <787953403@qq.com> Date: Wed, 10 Apr 2019 21:57:50 +0800 Subject: [PATCH] fix: create tempfile in root dir prevent cross-device link --- resource/src/lib.rs | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/resource/src/lib.rs b/resource/src/lib.rs index 494a078654..789df621d0 100644 --- a/resource/src/lib.rs +++ b/resource/src/lib.rs @@ -146,21 +146,19 @@ impl ResourceLocator { pub fn export_ckb<'a>(&self, context: &TemplateContext<'a>) -> Result<()> { let ckb = Resource::Bundled(CKB_CONFIG_FILE_NAME.to_string()); let template = Template::new(from_utf8(ckb.get()?)?); - let mut out = NamedTempFile::new()?; + let mut out = NamedTempFile::new_in(&self.root_dir)?; template.write_to(&mut out, context)?; - out.into_temp_path() - .persist(self.root_dir.join(CKB_CONFIG_FILE_NAME)) - .map_err(Into::into) + out.persist(self.root_dir.join(CKB_CONFIG_FILE_NAME))?; + Ok(()) } pub fn export_miner<'a>(&self, context: &TemplateContext<'a>) -> Result<()> { let miner = Resource::Bundled(MINER_CONFIG_FILE_NAME.to_string()); let template = Template::new(from_utf8(miner.get()?)?); - let mut out = NamedTempFile::new()?; + let mut out = NamedTempFile::new_in(&self.root_dir)?; template.write_to(&mut out, context)?; - out.into_temp_path() - .persist(self.root_dir.join(MINER_CONFIG_FILE_NAME)) - .map_err(Into::into) + out.persist(self.root_dir.join(MINER_CONFIG_FILE_NAME))?; + Ok(()) } pub fn export_specs(&self) -> Result<()> { @@ -168,7 +166,7 @@ impl ResourceLocator { if name.starts_with(SPECS_RESOURCE_DIR_NAME) { let path = self.root_dir.join(name); fs::create_dir_all(path.parent().unwrap())?; - let mut out = NamedTempFile::new()?; + let mut out = NamedTempFile::new_in(&self.root_dir)?; io::copy(&mut BUNDLED.read(name)?, &mut out)?; out.into_temp_path().persist(path)?; }