From 02737fb6401415f04c50b71a5c75d3b47427748c Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Sat, 29 Nov 2025 01:38:57 +0100 Subject: [PATCH 1/2] avm2: Stub for Error.getErrorMessage --- core/src/avm2/globals/Error.as | 2 ++ core/src/avm2/globals/error.rs | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/core/src/avm2/globals/Error.as b/core/src/avm2/globals/Error.as index 5953075e1eda..bee73ca0219e 100644 --- a/core/src/avm2/globals/Error.as +++ b/core/src/avm2/globals/Error.as @@ -11,6 +11,8 @@ package { }; } + public static native function getErrorMessage(id:int):String; + [Ruffle(NativeAccessible)] public var name:String = "Error"; diff --git a/core/src/avm2/globals/error.rs b/core/src/avm2/globals/error.rs index 4d10f443392a..129a16c22bb9 100644 --- a/core/src/avm2/globals/error.rs +++ b/core/src/avm2/globals/error.rs @@ -1,9 +1,22 @@ use crate::avm2::activation::Activation; pub use crate::avm2::object::error_allocator; +use crate::avm2::parameters::ParametersExt; use crate::avm2::string::AvmString; use crate::avm2::value::Value; use crate::avm2::Error; -use crate::PlayerMode; +use crate::{avm2_stub_method, PlayerMode}; + +pub fn get_error_message<'gc>( + activation: &mut Activation<'_, 'gc>, + _this: Value<'gc>, + args: &[Value<'gc>], +) -> Result, Error<'gc>> { + avm2_stub_method!(activation, "Error", "getErrorMessage"); + + let id = args.get_i32(0); + let message = format!("Error #{id}"); + Ok(AvmString::new_utf8(activation.gc(), message).into()) +} pub fn get_stack_trace<'gc>( activation: &mut Activation<'_, 'gc>, From 2bb95fa46bbdfed4c159c426dd0db2688380cdbc Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Sun, 7 Dec 2025 14:08:28 +0100 Subject: [PATCH 2/2] tests: Test working part of Error.getErrorMessage --- .../swfs/avm2/error_geterrormessage/Test.as | 19 ++++++++++++++++++ .../avm2/error_geterrormessage/output.txt | 6 ++++++ .../swfs/avm2/error_geterrormessage/test.swf | Bin 0 -> 764 bytes .../swfs/avm2/error_geterrormessage/test.toml | 1 + 4 files changed, 26 insertions(+) create mode 100644 tests/tests/swfs/avm2/error_geterrormessage/Test.as create mode 100644 tests/tests/swfs/avm2/error_geterrormessage/output.txt create mode 100644 tests/tests/swfs/avm2/error_geterrormessage/test.swf create mode 100644 tests/tests/swfs/avm2/error_geterrormessage/test.toml diff --git a/tests/tests/swfs/avm2/error_geterrormessage/Test.as b/tests/tests/swfs/avm2/error_geterrormessage/Test.as new file mode 100644 index 000000000000..d3fbbf593bdf --- /dev/null +++ b/tests/tests/swfs/avm2/error_geterrormessage/Test.as @@ -0,0 +1,19 @@ +package { + import flash.display.Sprite; + + public class Test extends Sprite { + public function Test() { + trace(Error.getErrorMessage(-1)); + trace(Error.getErrorMessage(0)); + trace(Error.getErrorMessage(1)); + trace(Error.getErrorMessage(42)); + trace(Error.getErrorMessage(100)); + // TODO: + // Error #1000: The system is out of memory. + // trace(Error.getErrorMessage(1000)); + // Error #1042: Not an ABC file. major_version=%1 minor_version=%2. + // trace(Error.getErrorMessage(1042)); + trace(Error.getErrorMessage(10000)); + } + } +} \ No newline at end of file diff --git a/tests/tests/swfs/avm2/error_geterrormessage/output.txt b/tests/tests/swfs/avm2/error_geterrormessage/output.txt new file mode 100644 index 000000000000..152f03482b3d --- /dev/null +++ b/tests/tests/swfs/avm2/error_geterrormessage/output.txt @@ -0,0 +1,6 @@ +Error #-1 +Error #0 +Error #1 +Error #42 +Error #100 +Error #10000 diff --git a/tests/tests/swfs/avm2/error_geterrormessage/test.swf b/tests/tests/swfs/avm2/error_geterrormessage/test.swf new file mode 100644 index 0000000000000000000000000000000000000000..7386f754fbe1691e5a8eb30d099a1b92663ff390 GIT binary patch literal 764 zcmVrG~$+~S127}6AtwLGHUai;b zwo|pM)v{oe)6tWu&NfLz~mUi~AoOY>qJisTU97H(nZrWEwso^1yNMk#}UYC^i zA~Gy(U&$4D#E@M7s?NsvmVr=Iuu`kKl;S#1>XQCZ6sBFmCV84P-~-G=LfVggRjCqQ z5v9yy1atad(S#-?5so{3+#wATw_i7v=Ov_WfH`Tn#49~{T&gHd!YO|)67kw6O z1g2OBpaLx3nuEo8s2i59nhO!sT_|Eu0}y5{?aX;5+O9z>*Z-}Z8)uGK``|p&f-MxF z2N!!9+=FoC+#Ca70%XSkoB-Ascr*cWW5AyPg%R-Z