From 34156cc6d1699bdacaf7cce24645dbc1d16724fc Mon Sep 17 00:00:00 2001 From: Lord-McSweeney <84632019+Lord-McSweeney@users.noreply.github.com> Date: Fri, 21 Apr 2023 22:52:19 -0700 Subject: [PATCH] avm2: Throw AVM error for invalid frame labels --- .../avm2/globals/flash/display/movie_clip.rs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/core/src/avm2/globals/flash/display/movie_clip.rs b/core/src/avm2/globals/flash/display/movie_clip.rs index 971fd89f1..3499259bc 100644 --- a/core/src/avm2/globals/flash/display/movie_clip.rs +++ b/core/src/avm2/globals/flash/display/movie_clip.rs @@ -2,6 +2,7 @@ use crate::avm2::activation::Activation; use crate::avm2::array::ArrayStorage; +use crate::avm2::error::argument_error; use crate::avm2::object::{ArrayObject, Object, TObject}; use crate::avm2::parameters::ParametersExt; use crate::avm2::value::Value; @@ -386,18 +387,24 @@ pub fn goto_frame<'gc>( //the requested frame exists within that scene. let scene = args[1].coerce_to_string(activation)?; if !mc.frame_exists_within_scene(&frame_or_label, &scene, &activation.context) { - return Err(format!( - "ArgumentError: Frame label {frame_or_label} not found in scene {scene}", - ) - .into()); + return Err(Error::AvmError(argument_error( + activation, + &format!("Error #2109: Frame label {frame_or_label} not found in scene {scene}."), + 2109, + )?)); } } let frame = mc.frame_label_to_number(&frame_or_label, &activation.context); if activation.context.swf.version() >= 11 { - frame.ok_or_else(|| { - format!("ArgumentError: {frame_or_label} is not a valid frame label.") - })? as i32 + frame.ok_or( + // TODO: Also include the scene in the error message, as done above + Error::AvmError(argument_error( + activation, + &format!("Error #2109: {frame_or_label} is not a valid frame label."), + 2109, + )?), + )? as i32 } else { frame.unwrap_or(0) as i32 // Old swf versions silently jump to frame 1 for invalid labels. }