diff options
author | Greg <gregory.mkv@gmail.com> | 2020-04-22 16:48:07 -0400 |
---|---|---|
committer | Greg <gregory.mkv@gmail.com> | 2020-04-22 16:48:07 -0400 |
commit | 39c29b20cb6c6aae602622ba7eaa4fb23fb08b35 (patch) | |
tree | 8587db7734da973faf800c7d0b09b1a51bc46270 | |
parent | 4a5700595944c434511148c2c520ce46565da5fe (diff) |
Ensure memmap source is not empty
resolves #74
-rw-r--r-- | src/input.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/input.rs b/src/input.rs index 8a785d2..3473e72 100644 --- a/src/input.rs +++ b/src/input.rs @@ -84,6 +84,13 @@ impl Replacer { self.regex.is_match(content) } + fn check_not_empty(path: &Path) -> Result<()> { + let mut buf: [u8; 1] = Default::default(); + let mut file = std::fs::File::open(path)?; + file.read_exact(&mut buf)?; + Ok(()) + } + fn replace<'a>(&'a self, content: &'a [u8]) -> std::borrow::Cow<'a, [u8]> { if self.is_literal { self.regex.replace_all( @@ -99,7 +106,10 @@ impl Replacer { use memmap::{Mmap, MmapMut}; use std::ops::DerefMut; - let path = std::path::Path::new(path); + if let Err(_) = Self::check_not_empty(path) { + return Ok(()); + } + let source = File::open(path)?; let meta = source.metadata()?; let mmap_source = unsafe { Mmap::map(&source)? }; |