diff --git a/swf/src/extensions.rs b/swf/src/extensions.rs index 17fba9496..445b76d8d 100644 --- a/swf/src/extensions.rs +++ b/swf/src/extensions.rs @@ -107,8 +107,9 @@ pub trait ReadSwfExt<'a> { } #[inline] - fn read_str_with_len(&mut self, len: usize) -> Result<&'a SwfStr> { - let bytes = &self.read_slice(len)?; + fn read_str_with_len(&mut self) -> Result<&'a SwfStr> { + let len = self.read_u8()?; + let bytes = &self.read_slice(len.into())?; // TODO: Maybe just strip the possible trailing null char instead of looping here. Ok(SwfStr::from_bytes_null_terminated(bytes).unwrap_or_else(|| SwfStr::from_bytes(bytes))) } diff --git a/swf/src/read.rs b/swf/src/read.rs index 23353151a..cd34b3518 100644 --- a/swf/src/read.rs +++ b/swf/src/read.rs @@ -995,10 +995,9 @@ impl<'a> Reader<'a> { let id = self.read_character_id()?; let flags = FontFlag::from_bits_truncate(self.read_u8()?); let language = self.read_language()?; - let name_len = self.read_u8()?; // SWF19 states that the font name should not have a terminating null byte, // but it often does (depends on Flash IDE version?) - let name = self.read_str_with_len(name_len.into())?; + let name = self.read_str_with_len()?; let num_glyphs = self.read_u16()? as usize; let mut glyphs = vec![ @@ -1212,10 +1211,7 @@ impl<'a> Reader<'a> { fn read_define_font_info(&mut self, version: u8) -> Result> { let id = self.read_u16()?; - - let font_name_len = self.read_u8()?; - let font_name = self.read_str_with_len(font_name_len.into())?; - + let font_name = self.read_str_with_len()?; let flags = self.read_u8()?; let use_wide_codes = flags & 0b1 != 0; // TODO(Herschel): Warn if false for version 2.