From 20b07ff147131ccb71765c640f4f039ee449e071 Mon Sep 17 00:00:00 2001 From: nosamu <71368227+n0samu@users.noreply.github.com> Date: Tue, 22 Aug 2023 03:01:18 -0500 Subject: [PATCH] avm1: Fix XML=>String coercion mangling non-ascii chars Fixes #12859 --- core/src/xml/tree.rs | 4 ++-- .../tests/swfs/avm1/xml_to_string/output.txt | 7 ++++++- tests/tests/swfs/avm1/xml_to_string/test.fla | Bin 4767 -> 5008 bytes tests/tests/swfs/avm1/xml_to_string/test.swf | Bin 305 -> 359 bytes 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/xml/tree.rs b/core/src/xml/tree.rs index ef45764f8..2aadb79b0 100644 --- a/core/src/xml/tree.rs +++ b/core/src/xml/tree.rs @@ -456,7 +456,7 @@ impl<'gc> XmlNode<'gc> { result.push_byte(b' '); result.push_str(&key); result.push_str(WStr::from_units(b"=\"")); - result.push_str(WStr::from_units(value.as_bytes())); + result.push_utf8(&value); result.push_byte(b'"'); } @@ -480,7 +480,7 @@ impl<'gc> XmlNode<'gc> { let value = self.0.read().node_value.unwrap(); let value = value.to_utf8_lossy(); let value = escape(&value); - result.push_str(WStr::from_units(value.as_bytes())); + result.push_utf8(&value); } Ok(()) diff --git a/tests/tests/swfs/avm1/xml_to_string/output.txt b/tests/tests/swfs/avm1/xml_to_string/output.txt index f23748090..b605fe699 100644 --- a/tests/tests/swfs/avm1/xml_to_string/output.txt +++ b/tests/tests/swfs/avm1/xml_to_string/output.txt @@ -1,8 +1,13 @@ I'm a text node! +<продукция>Название_Name I'm a text node! +<продукция>Название_Name "Test" Node 2 I'm a text node! +<продукция>Название_Name "Test" Node 2 -I'm a text node! +I'm a text node! +<продукция>Название_Name +<продукция>Название_Name diff --git a/tests/tests/swfs/avm1/xml_to_string/test.fla b/tests/tests/swfs/avm1/xml_to_string/test.fla index bc8f305a3a30840552d39e07be19e878bf2ee69a..43c80aa99602ba49e5aa731f8cd9e46e84c4df41 100644 GIT binary patch delta 4064 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 E7ov}tVE_OC delta 3821 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 QlZ4>BSh%P>Apf}jAEcHRg#Z8m diff --git a/tests/tests/swfs/avm1/xml_to_string/test.swf b/tests/tests/swfs/avm1/xml_to_string/test.swf index 1c452d5f14805e6f3faf77c692ff245f40a814bf..0b4b4017e148a581c8b975044547f04784cf4090 100644 GIT binary patch delta 340 zcmV-a0jvJ80_Oq-LswG=HUg0b9)IK@6-Nt`w6LPG^vGN@%N*}QKf~OtoMZ!r3;e4$ zG8E}J8#qqf#d~IfWqYMP^L<7JhK?HyybQUO@fEo_3^paH#U*w&`e2I7Q$1H9QNbq3 zt|YahL?JIfCDleh$xe~W=EDAq4Hx!Z*mAM?!mf*L7j|6ix4SU+!iEdmFMn(Tl6x=g zxUeKMSlYxx^3jDyTSV06ETtz#OW`Y{S4l#yR2H9+8ut6L_;z%}df(R~fabA){Gi6*0HgrsL6bvcE0K5r delta 286 zcmV+(0pb4V0eK5u4sh+Els9=+1 zSCU#$qL7!Ll4_%$WT(gw;p@WyQUTVIoROK6;s=x~28$Vi1;H$kI*&n zNFh`W$Up|A5FlGg0i;C1hyi50Ut(@5LtbjRAB;VXiGc%5FivA-UV}Jrbuqsv%!3Nh3q?w?`utSVtl|eR}8Eg354 k5u7MSuwpR+;y!K=!Q+oCzz@j44CSjaH~