From b82f50ac7445b690c736ecb42f41d24a3ddc3ba1 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Wed, 25 Aug 2021 16:35:58 +0200 Subject: Validate signatures before record fixup to catch invalid positions early --- src/file.rs | 8 ++++---- src/index_record.rs | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/file.rs b/src/file.rs index 9307f87..16f791c 100644 --- a/src/file.rs +++ b/src/file.rs @@ -68,10 +68,10 @@ impl<'n> NtfsFile<'n> { fs.read_exact(&mut data)?; let mut record = Record::new(ntfs, data, position); + Self::validate_signature(&record)?; record.fixup()?; let file = Self { record }; - file.validate_signature()?; file.validate_sizes()?; Ok(file) @@ -243,15 +243,15 @@ impl<'n> NtfsFile<'n> { LittleEndian::read_u32(&self.record.data()[start..]) } - fn validate_signature(&self) -> Result<()> { - let signature = &self.record.signature(); + fn validate_signature(record: &Record) -> Result<()> { + let signature = &record.signature(); let expected = b"FILE"; if signature == expected { Ok(()) } else { Err(NtfsError::InvalidFileSignature { - position: self.record.position(), + position: record.position(), expected, actual: *signature, }) diff --git a/src/index_record.rs b/src/index_record.rs index e0fab4f..ddec81a 100644 --- a/src/index_record.rs +++ b/src/index_record.rs @@ -58,10 +58,10 @@ impl<'n> NtfsIndexRecord<'n> { value.read_exact(fs, &mut data)?; let mut record = Record::new(value.ntfs(), data, data_position); + Self::validate_signature(&record)?; record.fixup()?; let index_record = Self { record }; - index_record.validate_signature()?; index_record.validate_sizes()?; Ok(index_record) @@ -116,15 +116,15 @@ impl<'n> NtfsIndexRecord<'n> { IndexNodeEntryRanges::new(self.record.into_data(), entries_range, position) } - fn validate_signature(&self) -> Result<()> { - let signature = &self.record.signature(); + fn validate_signature(record: &Record) -> Result<()> { + let signature = &record.signature(); let expected = b"INDX"; if signature == expected { Ok(()) } else { Err(NtfsError::InvalidIndexSignature { - position: self.record.position(), + position: record.position(), expected, actual: *signature, }) -- cgit v1.2.3