avm2: Correctly set XML attribute with namespace

This commit is contained in:
Tom Schuster 2024-08-30 23:51:41 +02:00
parent 795fa0df27
commit 2fd8f600bc
4 changed files with 5 additions and 3 deletions

View File

@ -212,6 +212,7 @@ impl<'gc> E4XNode<'gc> {
pub fn attribute( pub fn attribute(
mc: &Mutation<'gc>, mc: &Mutation<'gc>,
namespace: Option<E4XNamespace<'gc>>,
name: AvmString<'gc>, name: AvmString<'gc>,
value: AvmString<'gc>, value: AvmString<'gc>,
parent: Option<E4XNode<'gc>>, parent: Option<E4XNode<'gc>>,
@ -220,7 +221,7 @@ impl<'gc> E4XNode<'gc> {
mc, mc,
E4XNodeData { E4XNodeData {
parent, parent,
namespace: None, namespace: namespace.map(Box::new),
local_name: Some(name), local_name: Some(name),
kind: E4XNodeKind::Attribute(value), kind: E4XNodeKind::Attribute(value),
notification: None, notification: None,

View File

@ -722,6 +722,7 @@ impl<'gc> TObject<'gc> for XmlListObject<'gc> {
// 2.c.iv.3. Let y.[[Class]] = "attribute" // 2.c.iv.3. Let y.[[Class]] = "attribute"
E4XNode::attribute( E4XNode::attribute(
activation.gc(), activation.gc(),
x.explicit_namespace().map(E4XNamespace::new_uri),
x.local_name().unwrap(), x.local_name().unwrap(),
"".into(), "".into(),
r, r,

View File

@ -511,7 +511,8 @@ impl<'gc> TObject<'gc> for XmlObject<'gc> {
let Some(local_name) = name.local_name() else { let Some(local_name) = name.local_name() else {
return Err(format!("Cannot set attribute {:?} without a local name", name).into()); return Err(format!("Cannot set attribute {:?} without a local name", name).into());
}; };
let new_attr = E4XNode::attribute(mc, local_name, value, Some(self.node())); let ns = name.explicit_namespace().map(E4XNamespace::new_uri);
let new_attr = E4XNode::attribute(mc, ns, local_name, value, Some(self.node()));
let node = self.0.node.get(); let node = self.0.node.get();
let mut kind = node.kind_mut(mc); let mut kind = node.kind_mut(mc);

View File

@ -1,2 +1 @@
num_ticks = 1 num_ticks = 1
known_failure = true # https://github.com/ruffle-rs/ruffle/issues/12351