diff options
| author | Edward Barnard | 2017-05-05 09:55:06 +0100 |
|---|---|---|
| committer | Edward Barnard | 2017-05-05 09:55:06 +0100 |
| commit | 3f67a83b884925288e782033454e72944257b219 (patch) | |
| tree | 1af091c039c1a15ce543e2e4b586b21bcf650dbe /src/binary | |
| parent | 1a60c49909c4dfffa112a7b9e63dbf87224c2e16 (diff) | |
| download | rust-plist-3f67a83b884925288e782033454e72944257b219.tar.bz2 | |
Check binary plist offset size is valid.
Diffstat (limited to 'src/binary')
| -rw-r--r-- | src/binary/reader.rs | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/binary/reader.rs b/src/binary/reader.rs index e783dfb..11d5dfa 100644 --- a/src/binary/reader.rs +++ b/src/binary/reader.rs @@ -85,11 +85,17 @@ impl<R: Read + Seek> EventReader<R> { let trailer_start = self.reader.seek(SeekFrom::End(-32 + 6))?; let offset_size = self.reader.read_u8()?; + match offset_size { + 1 | 2 | 4 | 8 => (), + _ => return Err(Error::InvalidData) + } + self.ref_size = self.reader.read_u8()?; match self.ref_size { 1 | 2 | 4 | 8 => (), _ => return Err(Error::InvalidData) } + let num_objects = self.reader.read_u64::<BigEndian>()?; let top_object = self.reader.read_u64::<BigEndian>()?; let offset_table_offset = self.reader.read_u64::<BigEndian>()?; |
