From 78c03a9594d7a2767d23b51e3c97acfdedd40885 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 3 Feb 2017 18:03:51 -0800 Subject: [PATCH] Fix TTC handling --- src/otf/mod.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/otf/mod.rs b/src/otf/mod.rs index 4223e0fb..1949bc4c 100644 --- a/src/otf/mod.rs +++ b/src/otf/mod.rs @@ -107,16 +107,18 @@ impl<'a> Font<'a> { } let table_offset = try!(reader.read_u32::().map_err(Error::eof)); - Font::from_otf(&bytes[table_offset as usize..]) + Font::from_otf(&bytes, table_offset) } - magic_number if SFNT_VERSIONS.contains(&magic_number) => Font::from_otf(bytes), + magic_number if SFNT_VERSIONS.contains(&magic_number) => Font::from_otf(bytes, 0), 0x0100 => Font::from_dfont(bytes), _ => Err(Error::UnknownFormat), } } - pub fn from_otf<'b>(bytes: &'b [u8]) -> Result, Error> { + pub fn from_otf<'b>(bytes: &'b [u8], offset: u32) -> Result, Error> { let mut reader = bytes; + try!(reader.jump(offset as usize).map_err(Error::eof)); + let mut magic_number = try!(reader.read_u32::().map_err(Error::eof)); // Check version. @@ -242,7 +244,7 @@ impl<'a> Font<'a> { try!(reader.jump(resource_data_offset as usize + sfnt_data_offset as usize) .map_err(Error::eof)); let sfnt_size = try!(reader.read_u32::().map_err(Error::eof)); - Font::from_otf(&reader[0..sfnt_size as usize]) + Font::from_otf(&reader[0..sfnt_size as usize], 0) } #[inline]