summaryrefslogtreecommitdiff
path: root/xfa
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2018-07-25 17:04:49 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-07-25 17:04:49 +0000
commit96b0d1332430e34219334373aeb0f6a85eb8ad68 (patch)
treee50f75e447d6c1dff6e50b4b089af5b1a21b475e /xfa
parent1f7db295b1deeecb562d6213b3ea17b9168405eb (diff)
downloadpdfium-96b0d1332430e34219334373aeb0f6a85eb8ad68.tar.xz
Introduce ToXMLElement() checked downcast helper function
And use it in place of ASSERT() that the type was correct. Since we can check it, doing so at runtime may help avoid type confusion, and we'll get a nice safe SEGV if the asserted condition ever fails. Change-Id: I46b65a4b70e819a670d7cad7966e0d100f0d9a63 Reviewed-on: https://pdfium-review.googlesource.com/38810 Commit-Queue: Tom Sepez <tsepez@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'xfa')
-rw-r--r--xfa/fxfa/parser/cxfa_document.cpp7
-rw-r--r--xfa/fxfa/parser/cxfa_document_parser.cpp8
-rw-r--r--xfa/fxfa/parser/cxfa_node.cpp7
-rw-r--r--xfa/fxfa/parser/xfa_utils.cpp15
4 files changed, 13 insertions, 24 deletions
diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp
index 5a85482b17..3e8046677a 100644
--- a/xfa/fxfa/parser/cxfa_document.cpp
+++ b/xfa/fxfa/parser/cxfa_document.cpp
@@ -539,10 +539,9 @@ void CreateDataBinding(CXFA_Node* pFormNode,
false);
}
} else {
- CFX_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode();
- ASSERT(pXMLNode->GetType() == FX_XMLNODE_Element);
- static_cast<CFX_XMLElement*>(pXMLNode)->SetAttribute(
- L"xfa:dataNode", L"dataGroup");
+ CFX_XMLElement* pElement =
+ ToXMLElement(pDataNode->GetXMLMappingNode());
+ pElement->SetAttribute(L"xfa:dataNode", L"dataGroup");
}
} else if (!wsValue.IsEmpty()) {
pDataNode->JSObject()->SetAttributeValue(
diff --git a/xfa/fxfa/parser/cxfa_document_parser.cpp b/xfa/fxfa/parser/cxfa_document_parser.cpp
index 8e5ff9fbde..27d80cde15 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_document_parser.cpp
@@ -669,11 +669,9 @@ CXFA_Node* CXFA_DocumentParser::ParseAsXDPPacket_Data(
if (pParentXMLNode)
pParentXMLNode->RemoveChildNode(pXMLDocumentNode);
- ASSERT(pXMLDocumentNode->GetType() == FX_XMLNODE_Element);
- if (pXMLDocumentNode->GetType() == FX_XMLNODE_Element) {
- static_cast<CFX_XMLElement*>(pXMLDocumentNode)
- ->RemoveAttribute(L"xmlns:xfa");
- }
+ CFX_XMLElement* pElement = ToXMLElement(pXMLDocumentNode);
+ pElement->RemoveAttribute(L"xmlns:xfa");
+
// The node was either removed from the parent above, or already has no
// parent so we can take ownership.
pDataElement->AppendChild(pXMLDocumentNode);
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 6d45eb8f61..5f919b7b14 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -2712,11 +2712,10 @@ void CXFA_Node::SetImageEdit(const WideString& wsContentType,
CXFA_Node* pHrefNode = pBind->GetFirstChild();
if (pHrefNode) {
pHrefNode->JSObject()->SetCData(XFA_Attribute::Value, wsHref, false, false);
- } else {
- CFX_XMLNode* pXMLNode = pBind->GetXMLMappingNode();
- ASSERT(pXMLNode && pXMLNode->GetType() == FX_XMLNODE_Element);
- static_cast<CFX_XMLElement*>(pXMLNode)->SetAttribute(L"href", wsHref);
+ return;
}
+ CFX_XMLElement* pElement = ToXMLElement(pBind->GetXMLMappingNode());
+ pElement->SetAttribute(L"href", wsHref);
}
CXFA_FFWidget* CXFA_Node::GetNextWidget(CXFA_FFWidget* pWidget) {
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index b42da0b4a1..54cca88409 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -497,20 +497,13 @@ void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode) {
if (pDataNode->GetElementType() != XFA_Element::DataGroup)
return;
+ CFX_XMLElement* pElement = ToXMLElement(pDataNode->GetXMLMappingNode());
if (iChildNum > 0) {
- CFX_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode();
- ASSERT(pXMLNode->GetType() == FX_XMLNODE_Element);
- CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode);
- if (pXMLElement->HasAttribute(L"xfa:dataNode"))
- pXMLElement->RemoveAttribute(L"xfa:dataNode");
-
+ if (pElement->HasAttribute(L"xfa:dataNode"))
+ pElement->RemoveAttribute(L"xfa:dataNode");
return;
}
-
- CFX_XMLNode* pXMLNode = pDataNode->GetXMLMappingNode();
- ASSERT(pXMLNode->GetType() == FX_XMLNODE_Element);
- static_cast<CFX_XMLElement*>(pXMLNode)->SetAttribute(L"xfa:dataNode",
- L"dataGroup");
+ pElement->SetAttribute(L"xfa:dataNode", L"dataGroup");
}
void XFA_DataExporter_RegenerateFormFile(