XFA: Recognize delta objects as nodes
Make an exception for delta objects in CXFA_Object::IsNode() and
recognize it as a node. The delta object is special, as its the only
scripting object type whose parent class is none.
Bug: chromium:1465239
Change-Id: Ib5aa08b582941d559ab7fdd095f9b23e1aa00637
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/110150
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/parser/cxfa_node_unittest.cpp b/xfa/fxfa/parser/cxfa_node_unittest.cpp
index 2c745ca..e00772c 100644
--- a/xfa/fxfa/parser/cxfa_node_unittest.cpp
+++ b/xfa/fxfa/parser/cxfa_node_unittest.cpp
@@ -411,3 +411,14 @@
EXPECT_TRUE(GetNode()->IsAncestorOf(grandchild));
EXPECT_FALSE(child1->IsAncestorOf(grandchild));
}
+
+TEST_F(CXFANodeTest, DeltaObjectIsNode) {
+ CXFA_Node* delta =
+ CXFA_Node::Create(GetDoc(), XFA_Element::Delta, XFA_PacketType::Form);
+ ASSERT_TRUE(delta);
+ ASSERT_TRUE(delta->IsNode());
+
+ // This call should not crash, like in crbug.com/1465239.
+ delta->JSObject()->SetAttributeByEnum(XFA_Attribute::Name, L"delta",
+ /*bNotify=*/false);
+}
diff --git a/xfa/fxfa/parser/cxfa_object.h b/xfa/fxfa/parser/cxfa_object.h
index 84c4e98..c482d3b 100644
--- a/xfa/fxfa/parser/cxfa_object.h
+++ b/xfa/fxfa/parser/cxfa_object.h
@@ -59,7 +59,8 @@
m_objectType == XFA_ObjectType::ModelNode ||
m_objectType == XFA_ObjectType::TextNode ||
m_objectType == XFA_ObjectType::ContainerNode ||
- m_objectType == XFA_ObjectType::ContentNode;
+ m_objectType == XFA_ObjectType::ContentNode ||
+ m_elementType == XFA_Element::Delta;
}
bool IsTreeList() const { return m_objectType == XFA_ObjectType::TreeList; }
bool IsContentNode() const {