avm2: Propagate normal error for bad Multiname read in verifier

This commit is contained in:
Lord-McSweeney 2024-03-03 14:21:45 -08:00 committed by Lord-McSweeney
parent 41bac2ce98
commit 24d194a8b1
1 changed files with 25 additions and 30 deletions

View File

@ -284,38 +284,33 @@ pub fn verify_method<'gc>(
| AbcOp::Coerce { index: name_index } => { | AbcOp::Coerce { index: name_index } => {
let multiname = method let multiname = method
.translation_unit() .translation_unit()
.pool_maybe_uninitialized_multiname(name_index, &mut activation.context); .pool_maybe_uninitialized_multiname(name_index, &mut activation.context)?;
if let Ok(multiname) = multiname { if multiname.has_lazy_component() {
if multiname.has_lazy_component() { // This matches FP's error message
// This matches FP's error message return Err(Error::AvmError(verify_error(
return Err(Error::AvmError(verify_error( activation,
activation, "Error #1014: Class [] could not be found.",
"Error #1014: Class [] could not be found.", 1014,
1014, )?));
)?));
}
activation
.domain()
.get_class(&multiname, activation.context.gc_context)
.ok_or_else(|| {
Error::AvmError(
verify_error(
activation,
&format!(
"Error #1014: Class {} could not be found.",
multiname
.to_qualified_name(activation.context.gc_context)
),
1014,
)
.expect("Error should construct"),
)
})?;
} else {
return Err(make_error_1032(activation, name_index.0));
} }
activation
.domain()
.get_class(&multiname, activation.context.gc_context)
.ok_or_else(|| {
Error::AvmError(
verify_error(
activation,
&format!(
"Error #1014: Class {} could not be found.",
multiname.to_qualified_name(activation.context.gc_context)
),
1014,
)
.expect("Error should construct"),
)
})?;
} }
_ => {} _ => {}