swf: Throw an error if an ABC bitstream calls for a parameter with more optional parameters than actual ones.

This commit is contained in:
David Wendt 2021-06-18 18:52:57 -04:00
parent 5018421eef
commit 7dc86fdeb0
1 changed files with 6 additions and 4 deletions

View File

@ -245,11 +245,13 @@ impl<'a> Reader<'a> {
if flags & 0x08 != 0 { if flags & 0x08 != 0 {
let num_optional_params = self.read_u30()? as usize; let num_optional_params = self.read_u30()? as usize;
let start = params.len() - num_optional_params; if let Some(start) = params.len().checked_sub(num_optional_params) {
let end = params.len(); for param in &mut params[start..] {
for param in &mut params[start..end] {
param.default_value = Some(self.read_constant_value()?); param.default_value = Some(self.read_constant_value()?);
} }
} else {
return Err(Error::invalid_data("Too many optional parameters"));
}
} }
if flags & 0x80 != 0 { if flags & 0x80 != 0 {