diff --git a/src/read.rs b/src/read.rs index 749ff0e0..e0ea7f8f 100644 --- a/src/read.rs +++ b/src/read.rs @@ -178,10 +178,13 @@ impl<R: Read+io::Seek> ZipArchive<R> let (archive_offset, directory_start, number_of_files) = try!(Self::get_directory_counts(&mut reader, &footer, cde_start_pos)); - let mut files = Vec::with_capacity(number_of_files); + let mut files = Vec::new(); let mut names_map = HashMap::new(); - try!(reader.seek(io::SeekFrom::Start(directory_start))); + if let Err(_) = reader.seek(io::SeekFrom::Start(directory_start)) { + return Err(ZipError::InvalidArchive("Could not seek to start of central directory")); + } + for _ in 0 .. number_of_files { let file = try!(central_header_to_zip_file(&mut reader, archive_offset));