swf: Simplify `read_str_with_len`

Read the length in the function itself rather than receiving it as
an argument.
This commit is contained in:
relrelb 2022-03-17 22:02:42 +02:00 committed by Mike Welsh
parent 1230b5e713
commit 6d2005c2fe
2 changed files with 5 additions and 8 deletions

View File

@ -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)))
}

View File

@ -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<Tag<'a>> {
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.