avm2: Use custom_unescape wherever we unescape XML
When we were using a fork of quick-xml, we modified the actual unescape method. Now that we're using the crates.io release again, we need to go through our `custom_unescape` function.
This commit is contained in:
parent
4fbbf994fe
commit
6ce6fd1681
|
@ -9,7 +9,10 @@ use quick_xml::{
|
||||||
Reader,
|
Reader,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::avm2::{error::type_error, TObject};
|
use crate::{
|
||||||
|
avm2::{error::type_error, TObject},
|
||||||
|
xml::custom_unescape,
|
||||||
|
};
|
||||||
|
|
||||||
use super::{object::E4XOrXml, string::AvmString, Activation, Error, Multiname, Value};
|
use super::{object::E4XOrXml, string::AvmString, Activation, Error, Multiname, Value};
|
||||||
use crate::string::{WStr, WString};
|
use crate::string::{WStr, WString};
|
||||||
|
@ -300,7 +303,7 @@ impl<'gc> E4XNode<'gc> {
|
||||||
|
|
||||||
match &event {
|
match &event {
|
||||||
Event::Start(bs) => {
|
Event::Start(bs) => {
|
||||||
let child = E4XNode::from_start_event(activation, bs)?;
|
let child = E4XNode::from_start_event(activation, bs, parser.decoder())?;
|
||||||
|
|
||||||
if let Some(current_tag) = open_tags.last_mut() {
|
if let Some(current_tag) = open_tags.last_mut() {
|
||||||
current_tag.append_child(activation.context.gc_context, child)?;
|
current_tag.append_child(activation.context.gc_context, child)?;
|
||||||
|
@ -309,7 +312,7 @@ impl<'gc> E4XNode<'gc> {
|
||||||
depth += 1;
|
depth += 1;
|
||||||
}
|
}
|
||||||
Event::Empty(bs) => {
|
Event::Empty(bs) => {
|
||||||
let node = E4XNode::from_start_event(activation, bs)?;
|
let node = E4XNode::from_start_event(activation, bs, parser.decoder())?;
|
||||||
push_childless_node(node, &mut open_tags, &mut top_level, depth, activation)?;
|
push_childless_node(node, &mut open_tags, &mut top_level, depth, activation)?;
|
||||||
}
|
}
|
||||||
Event::End(_) => {
|
Event::End(_) => {
|
||||||
|
@ -321,7 +324,7 @@ impl<'gc> E4XNode<'gc> {
|
||||||
}
|
}
|
||||||
Event::Text(bt) => {
|
Event::Text(bt) => {
|
||||||
handle_text_cdata(
|
handle_text_cdata(
|
||||||
bt.unescape()?.as_bytes(),
|
custom_unescape(bt, parser.decoder())?.as_bytes(),
|
||||||
ignore_white,
|
ignore_white,
|
||||||
&mut open_tags,
|
&mut open_tags,
|
||||||
&mut top_level,
|
&mut top_level,
|
||||||
|
@ -331,7 +334,7 @@ impl<'gc> E4XNode<'gc> {
|
||||||
)?;
|
)?;
|
||||||
}
|
}
|
||||||
Event::CData(bt) => {
|
Event::CData(bt) => {
|
||||||
// This is alreayd unescaped
|
// This is already unescaped
|
||||||
handle_text_cdata(
|
handle_text_cdata(
|
||||||
bt,
|
bt,
|
||||||
ignore_white,
|
ignore_white,
|
||||||
|
@ -348,7 +351,7 @@ impl<'gc> E4XNode<'gc> {
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let text = bt.unescape()?;
|
let text = custom_unescape(bt, parser.decoder())?;
|
||||||
let text =
|
let text =
|
||||||
AvmString::new_utf8_bytes(activation.context.gc_context, text.as_bytes());
|
AvmString::new_utf8_bytes(activation.context.gc_context, text.as_bytes());
|
||||||
let kind = match event {
|
let kind = match event {
|
||||||
|
@ -382,6 +385,7 @@ impl<'gc> E4XNode<'gc> {
|
||||||
pub fn from_start_event(
|
pub fn from_start_event(
|
||||||
activation: &mut Activation<'_, 'gc>,
|
activation: &mut Activation<'_, 'gc>,
|
||||||
bs: &BytesStart<'_>,
|
bs: &BytesStart<'_>,
|
||||||
|
decoder: quick_xml::Decoder,
|
||||||
) -> Result<Self, quick_xml::Error> {
|
) -> Result<Self, quick_xml::Error> {
|
||||||
// FIXME - handle namespace
|
// FIXME - handle namespace
|
||||||
let name =
|
let name =
|
||||||
|
@ -395,7 +399,7 @@ impl<'gc> E4XNode<'gc> {
|
||||||
activation.context.gc_context,
|
activation.context.gc_context,
|
||||||
attribute.key.into_inner(),
|
attribute.key.into_inner(),
|
||||||
);
|
);
|
||||||
let value_str = attribute.unescape_value()?;
|
let value_str = custom_unescape(&attribute.value, decoder)?;
|
||||||
let value =
|
let value =
|
||||||
AvmString::new_utf8_bytes(activation.context.gc_context, value_str.as_bytes());
|
AvmString::new_utf8_bytes(activation.context.gc_context, value_str.as_bytes());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue