diff options
author | Colin Finck <colin@reactos.org> | 2021-08-25 17:35:58 +0300 |
---|---|---|
committer | Colin Finck <colin@reactos.org> | 2021-08-25 17:35:58 +0300 |
commit | b82f50ac7445b690c736ecb42f41d24a3ddc3ba1 (patch) | |
tree | 6a985338e416eff9a00678a05adba13947da5303 | |
parent | ff2110ef9541e8d895a393d53fe2e487071bc520 (diff) |
Validate signatures before record fixup to catch invalid positions early
-rw-r--r-- | src/file.rs | 8 | ||||
-rw-r--r-- | 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, }) |