From b3c89de9ec4b139f96b9778b9f1c4e2ea6e823b4 Mon Sep 17 00:00:00 2001 From: matthew seyer Date: Fri, 21 Apr 2017 00:00:37 -0500 Subject: added an invalid entry signature error --- src/entry.rs | 8 ++++++++ src/errors.rs | 9 +++++++++ src/main.rs | 9 +++++++-- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/entry.rs b/src/entry.rs index 74f4a6c..0be1a1b 100644 --- a/src/entry.rs +++ b/src/entry.rs @@ -57,6 +57,14 @@ impl EntryHeader{ }; entry_header.signature = reader.read_u32::()?; + if entry_header.signature != 1162627398 { + return Err( + MftError::invalid_entry_signature( + format!("Bad signature: {:04X}",entry_header.signature) + ) + ); + } + entry_header.usa_offset = reader.read_u16::()?; entry_header.usa_size = reader.read_u16::()?; entry_header.logfile_sequence_number = reader.read_u64::()?; diff --git a/src/errors.rs b/src/errors.rs index 769fa94..4dc1547 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -6,6 +6,7 @@ use std::io; pub enum ErrorKind { IoError, InvalidFileSignature, + InvalidEntrySignature, Utf16Error } @@ -29,6 +30,14 @@ impl MftError{ } } #[allow(dead_code)] + pub fn invalid_entry_signature(err: String)->Self{ + MftError { + message: format!("{}",err), + kind: ErrorKind::InvalidFileSignature, + info: Some(vec![]), + } + } + #[allow(dead_code)] pub fn decode_error(err: String)->Self{ MftError { message: format!("{}",err), diff --git a/src/main.rs b/src/main.rs index f5b3a19..7d24845 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,6 @@ extern crate rwinstructs; extern crate serde_json; extern crate serde; extern crate clap; -use log::LogLevel::Debug; use clap::{App, Arg}; use rustymft::mft::{MftHandler}; use rwinstructs::reference; @@ -40,7 +39,13 @@ fn process_file(filename: &str, serializer: &mut S) }; for i in 0 .. mft_handler.get_entry_count() { - let mft_entry = mft_handler.entry(i).unwrap(); + let mft_entry = match mft_handler.entry(i) { + Ok(mft_entry) => mft_entry, + Err(error) => { + warn!("Could not parse file: {} [error: {}]", filename, error); + continue; + } + }; serializer.serialize_element(&mft_entry).unwrap(); } -- cgit v1.2.3