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 } => {
let multiname = method
.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() {
// This matches FP's error message
return Err(Error::AvmError(verify_error(
activation,
"Error #1014: Class [] could not be found.",
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));
if multiname.has_lazy_component() {
// This matches FP's error message
return Err(Error::AvmError(verify_error(
activation,
"Error #1014: Class [] could not be found.",
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"),
)
})?;
}
_ => {}