From f6c0685992f23d5a41ad397c6e91949ab840d9c3 Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Sun, 30 Apr 2023 23:04:07 +0200 Subject: [PATCH] avm2: Allow setting XML methods as properties --- core/src/avm2/object.rs | 8 ++++++++ .../tests/swfs/avm2/xml_set_children/Test.as | 6 ++++++ .../swfs/avm2/xml_set_children/output.txt | 3 +++ .../tests/swfs/avm2/xml_set_children/test.swf | Bin 1008 -> 1051 bytes 4 files changed, 17 insertions(+) diff --git a/core/src/avm2/object.rs b/core/src/avm2/object.rs index 0794bacc6..5464969a8 100644 --- a/core/src/avm2/object.rs +++ b/core/src/avm2/object.rs @@ -183,6 +183,7 @@ pub trait TObject<'gc>: 'gc + Collect + Debug + Into> + Clone + Copy { return self.get_property_local(multiname, activation); } + if let Some(bound_method) = self.get_bound_method(disp_id) { return Ok(bound_method.into()); } @@ -278,6 +279,13 @@ pub trait TObject<'gc>: 'gc + Collect + Debug + Into> + Clone + Copy ) } Some(Property::Method { .. }) => { + // Similar to the get_property special case for XML/XMLList. + if (self.as_xml_object().is_some() || self.as_xml_list_object().is_some()) + && multiname.contains_public_namespace() + { + return self.set_property_local(multiname, value, activation); + } + return Err(error::make_reference_error( activation, error::ReferenceErrorCode::AssignToMethod, diff --git a/tests/tests/swfs/avm2/xml_set_children/Test.as b/tests/tests/swfs/avm2/xml_set_children/Test.as index dab90f250..c0d507947 100644 --- a/tests/tests/swfs/avm2/xml_set_children/Test.as +++ b/tests/tests/swfs/avm2/xml_set_children/Test.as @@ -34,3 +34,9 @@ var xml = xxxyyyzzz; trace("before: " + xml.toXMLString()); xml.b = "abc"; trace("after: " + xml.toXMLString()); + +var xml = ; +trace("before: " + xml.toXMLString()); +xml.name = "abc"; +trace("xml.name: " + xml.name); +trace("after: " + xml.toXMLString()); diff --git a/tests/tests/swfs/avm2/xml_set_children/output.txt b/tests/tests/swfs/avm2/xml_set_children/output.txt index cf9654d40..eb341b3a7 100644 --- a/tests/tests/swfs/avm2/xml_set_children/output.txt +++ b/tests/tests/swfs/avm2/xml_set_children/output.txt @@ -10,3 +10,6 @@ before: after: abc before: xxxyyyzzz after: xxxyyyzzzabc +before: +xml.name: abc +after: abc diff --git a/tests/tests/swfs/avm2/xml_set_children/test.swf b/tests/tests/swfs/avm2/xml_set_children/test.swf index 4f00bfdfd197cd93fb76e384d16b95fb3a33b9dc..28e8404570ddeb8bfd6de1746e5f129065a75571 100644 GIT binary patch literal 1051 zcmV+$1myceS5qeG1^@tf0fm%JZ{tK5$H#UOCux(W+iqWWx4Y>Jgk_u9Nkye*Q)|nH zLM5Q94Tu#|6iw`LV%D)Od(t@NfW(DQ0pi5h;KYGj5#kHLWslht$MVd?>5DH!vOUl9 z{D1!$&pdI65`QC<{{^8n0W}xb5klWBy%7*<_=Z`3**q?W1KSDe5FM8KlzMeV8I4Aj z(O$*%drI}-;6PDpO08A~ML8Hd6o+Le*e+?@ph*JVw>)aOPLUbnt~;cMrBdW-=vSuR z(6_mzp)15D1LDv?saC3BWaxF%^#_=0*z;^l$IMO%%R%4OUytw^DVsJ9`VHk;$QWu- zn`lQK*88M*Y?H8fbd7WIRKc{y^*XiaElnUQnA3b+oVclDoHy*+R?sK@Y@U{D(h>Gy zLU-sGe5D+`7BWot38wD#PK&6kLhI z>)-dFO%VF=r+@$a0Y<-NzaRlczb=29K!{a%SU?pfdMCl76Q%DCh(g_g;`#13M29o> zhbC;bLIDnXh5|#~eEDy+3x_IJH;$xj!XJndLxmADeLTg(N@ugRv zeVX@tLh1O0Z#mR*dU6B9mSQbQ!GNT@1lpCEiQeWg3JY%r8?R~Nc6Hep5eVxGBoVFGqxZFw4+uG_`_EV&bD!m1Wl8wxxc zVNDBbFs#MMVtBY!-MUKN2Qm!92KZ^?@wlO|!TI?)n<~-3ik5KjfMnqyDr`_Mu68;- zw?o~IK}^fB*nhFpC$=YfZXkZJFM(33R`=6MVMSa?t_drd)H&C6m=7W1-L$lMV!D?;X>Ag8vW&qU}OXeD@xMPYLbt{p)TGYQ^Yf+z}2 z0fzZ!pc4cMu5?DaP(NmokjZ8*)Qc1JR+>D449qU1|A8vR5@OsMUonN-^; zGo`j=Q&!ueDe~JZw84LU0f_$Ur;a_~U}ZpFdv8MqS%-{s&&1eW69ds8qsc?^|D5SY2?cE5ky==;C^ V_#_SAoy^kJ$LASz&wr6p?YZBR3w!_o literal 1008 zcmVy$T4hO)=vdBWz%Kg=!%jQxYwWbcZrNd9V5c6lPmn#N<-GVZ0hGw+ z`Tzc;$VZA%>K}v(zag|Lp~k`*LgcfF_vqr;sZV?hn$;c!?P z?p6G-i>n6*2Uydwu9rbkjz%6MaoLNW?HIzKK_fGC0_ON$i5rrRKVXMDJBh1h-k1i1 z&=r=JiK$Eb)MF8@R;plRnKj!F`-B-J2wcY`+z!X(sOOs>hUA=%f3_7k8^=LSmr|H{lNJ5y< zA9$8nsQ_<<95X{onE$`fM8*-9c-;Z%QiFQ!Z<@mMCM4c~FlxLeVM%|!ThcXsZ@gX} ztz*9Rca9>7!08&OP#mniIW50EYBs+;J!_!Lc_@KZlli!9Z}XcdyZ>`)O+!Q`&3Aj<4??QbK>wTmJ))fJlq>)zH6Hj@G)mfxWj6ZYb$ zxrcR4+sB=Og z(AB5NQhc~o-MR@r0y2){I`|o*(Ws7j=i=gmPqor+cl|c=+ZMGQ&*7h4yGPwX3H(TY zzOTUPDAnqIHZ3j7%js2VIhS6{F3F0VQ46XpsY*tbRW+SemAtCVsLHG=w`in#|; zZdp<@C8#GE>H|s!p7MtD+Jx~-)Kc~r$ii5msHND7)=Jqat(CUZS}S8`w3ceCT1&QNaeI$8#MP64$h5L{ zc8BDyvb?i9|G8v+)|anxt^DqS<;ur1=-1=C^yyU|2D=Z*?9~ipR_<;MxRSp9UWb@KFM8OoLA*;L~YvQ-F^XaBCWT eHUYQqgFpWL*H>BiE#ww&{tYkT(EkJ6Fw)2eXZ0-r