From 939d467897410f2aef8299e85750b2299a7d7ea7 Mon Sep 17 00:00:00 2001 From: Callum Thomson Date: Fri, 9 Jul 2021 00:39:07 +0000 Subject: [PATCH] avm1: Correct ToInteger * Coerce objects as well. * Wrap numbers around i32. --- core/src/avm1/activation.rs | 10 ++-------- .../swfs/avm1/action_to_integer/output.txt | 14 ++++++++++++++ .../swfs/avm1/action_to_integer/test.fla | Bin 4719 -> 5009 bytes .../swfs/avm1/action_to_integer/test.swf | Bin 702 -> 899 bytes 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/core/src/avm1/activation.rs b/core/src/avm1/activation.rs index 75194dfad..c8012e750 100644 --- a/core/src/avm1/activation.rs +++ b/core/src/avm1/activation.rs @@ -2194,14 +2194,8 @@ impl<'a, 'gc, 'gc_context> Activation<'a, 'gc, 'gc_context> { } fn action_to_integer(&mut self) -> Result, Error<'gc>> { - let val = self.context.avm1.pop(); - - let value = match val { - Value::Undefined | Value::Null | Value::Object(_) => 0.0, - _ => val.coerce_to_f64(self)?, - }; - - self.context.avm1.push(value.trunc()); + let val = self.context.avm1.pop().coerce_to_i32(self)?; + self.context.avm1.push(val); Ok(FrameControl::Continue) } diff --git a/tests/tests/swfs/avm1/action_to_integer/output.txt b/tests/tests/swfs/avm1/action_to_integer/output.txt index fa705797a..e3470a97b 100644 --- a/tests/tests/swfs/avm1/action_to_integer/output.txt +++ b/tests/tests/swfs/avm1/action_to_integer/output.txt @@ -12,3 +12,17 @@ -2147483648 // int({}) 0 +// int(hello) +0 +// int(ten) +10 +// int(float) +10 +// int(negative) +-10 +// int(NaN) +0 +// int(valof) +42 +// int(0xffffffff) +-2147483648 diff --git a/tests/tests/swfs/avm1/action_to_integer/test.fla b/tests/tests/swfs/avm1/action_to_integer/test.fla index 5690663ad3d3a11a9cf9ac4022cc6c2dfc738f69..d86181b05f281c26786e6b684ac611f676aab7b0 100644 GIT binary patch delta 1971 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 diff --git a/tests/tests/swfs/avm1/action_to_integer/test.swf b/tests/tests/swfs/avm1/action_to_integer/test.swf index 4e648cfb798d6fa9eddcadd099113383d9ca827e..93547bdc3b3519d0f462e0944c3a2717abf5e4e5 100644 GIT binary patch literal 899 zcmV-}1AP2LS5ptR2LJ$goTXI%ZrfB8zD>#2Za_E2ph%Ul(yAjv&b5;|iLEq{*tIrL z)~Xbc_y^tC*R6%^Yx&;%=nxuzAszq~A^zbBcmkdQ@f3)+DEInD(yZMWo249|^PTg3 z@%gUhDJXvpz}jyBtS~2q%+CZPKWb zvfq=$n-Q~Xevi^v(lAP1q)Lr@nhzbND?&~k`ddjRC3vA7|&!QT0<@w z;+jK3I7Km3YYG%Pe8?~pj2KCd2no79F(ugnq9@WpLOe_>=>cCT5eULi4i zR-E`_?Ai$l(^H61La}gaw^CRoY)bt#{L41=>{g?-r|Fvdti>)-3pMwOh1&nM&?Rc2 zMqb6HXG%!3gPHqu^(zhY?_XB}X6gL={C)mu+)}rgy7fu;`SCaz9()-d&@a>n2N)-h zJqZ3#fB8j8eSyK>#Pr$Kfgt+lJIC0sP55PCzKAgT}-C8zYqC}DZ|L6J1er!1g zi!T9K{s_R@9BABL0RX&Pom&K;8e&`DZ#1RYbA6_Z(RQZ8d7wks?RInBe2#`kP_0xd zP|={K$wDEsp3hM%`)oZ^lLmwaVOHn_+@Zddj8U6Ld^?jFVPh{yu|CToOxq-9Q4hu_ zfND;G2}g)@GbD)9@PJacW+W=9=_1yV_CjhC#snU@lKHGC$x=IVTr6#s)hfK`oM4fL z_-dM>sj{NVdF4RS^g>?O@-HTAL($OHA{=4F(UdQ*i#J~y`Oe8kPKq77ca`r9BBY^7NSQRogf2wRZ2#3MduB2RUYC$@B(h92TI6a=ngp#%tHnRTf3s*8?^Y$w@P z;hFGXrzBR^YF)m=o(IQj#`lSRxtbmH0s{95qfuxPAzvSzkXB3I^%+OLMRprCQOG$C z))lR!7+ZD2C>6Dxx~dvV*)YvUu~6SCmdi$Qko|eyPj zGdhD>&)1uU(vDfL6wJ%0GZ5)qN$4CC+zhEV*o6Rvj3h~IXU0(_F%9z7o#~kB<*TMJ zWgXM-j0OE64Nop)Sfc+E({B+{x-n-t%|6m_bnDe5V9uYOp57A|;)c3munoW6Yew{O z@p&^0)8C2XOc!{`uwW!-W%ZiS}0kfKYOLen0Xtu^pe_ z2O!&@0}E@}{;jm>N3J`p&x`tUTDOtQNYc0tmcZ!A_HU$pWvaK5_BJ_Td@~U&f@`Ap kKHI-@*0d>Yqp*!$pI6*W6>r{NV4G`M@JRfB0Y-`BW?fub=Kufz