diff --git a/Cargo.toml b/Cargo.toml index e761db1..e0f8e89 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "exif" -version = "0.5.2" +version = "0.5.3" authors = ["KAMADA Ken'ichi "] edition = "2018" diff --git a/src/util.rs b/src/util.rs index 1a8485c..ac76346 100644 --- a/src/util.rs +++ b/src/util.rs @@ -56,6 +56,9 @@ impl BufReadExt for T where T: io::BufRead { fn discard_exact(&mut self, mut len: usize) -> io::Result<()> { while len > 0 { let consume_len = match self.fill_buf() { + Ok(buf) if buf.is_empty() => + return Err(io::Error::new( + io::ErrorKind::UnexpectedEof, "unexpected EOF")), Ok(buf) => buf.len().min(len), Err(e) if e.kind() == io::ErrorKind::Interrupted => continue, Err(e) => return Err(e), @@ -98,6 +101,16 @@ mod tests { use std::io::Read; use super::*; + #[test] + fn discard_exact() { + let mut buf = b"abc".as_ref(); + buf.discard_exact(1).unwrap(); + assert_eq!(buf, b"bc"); + buf.discard_exact(2).unwrap(); + assert_eq!(buf, b""); + buf.discard_exact(1).unwrap_err(); + } + #[test] fn read8_len() { let data = [];