Remove unreachable code paths in cxfa_document_parser.cpp
- UserPacketLoader() is a no-op.
- FindAttributeWithNS() is always called with a valid element and
the default bMatchAsNSPrefix argument.
- Remove out parameter from FindAttributeWithNS() in favor of
Optional<> while we're at it.
Change-Id: I9eb65b714b637677b3045ea20491fecf64d8e839
Reviewed-on: https://pdfium-review.googlesource.com/c/48410
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/parser/cxfa_document_parser.cpp b/xfa/fxfa/parser/cxfa_document_parser.cpp
index 1ab2c21..ace9bb4 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_document_parser.cpp
@@ -23,6 +23,7 @@
#include "core/fxcrt/xml/cfx_xmltext.h"
#include "fxjs/xfa/cjx_object.h"
#include "third_party/base/logging.h"
+#include "third_party/base/optional.h"
#include "xfa/fxfa/fxfa.h"
#include "xfa/fxfa/parser/cxfa_document.h"
#include "xfa/fxfa/parser/cxfa_node.h"
@@ -100,14 +101,9 @@
return true;
}
-bool FindAttributeWithNS(CFX_XMLElement* pElement,
- WideStringView wsLocalAttributeName,
- WideStringView wsNamespaceURIPrefix,
- WideString& wsValue,
- bool bMatchNSAsPrefix = false) {
- if (!pElement)
- return false;
-
+Optional<WideString> FindAttributeWithNS(CFX_XMLElement* pElement,
+ WideStringView wsLocalAttributeName,
+ WideStringView wsNamespaceURIPrefix) {
WideString wsAttrNS;
for (auto it : pElement->GetAttributes()) {
auto pos = it.first.Find(L':', 0);
@@ -122,24 +118,14 @@
}
wsNSPrefix = it.first.Left(pos.value());
}
-
if (!XFA_FDEExtension_ResolveNamespaceQualifier(pElement, wsNSPrefix,
- &wsAttrNS)) {
+ &wsAttrNS) ||
+ wsAttrNS != wsNamespaceURIPrefix) {
continue;
}
- if (bMatchNSAsPrefix) {
- if (wsAttrNS.Left(wsNamespaceURIPrefix.GetLength()) !=
- wsNamespaceURIPrefix) {
- continue;
- }
- } else {
- if (wsAttrNS != wsNamespaceURIPrefix)
- continue;
- }
- wsValue = it.second;
- return true;
+ return it.second;
}
- return false;
+ return {};
}
CFX_XMLNode* GetDataSetsFromXDP(CFX_XMLNode* pXMLDocumentNode) {
@@ -659,18 +645,10 @@
WideString wsName = ToXMLElement(pXMLDocumentNode)->GetLocalTagName();
pNode->JSObject()->SetCData(XFA_Attribute::Name, wsName, false, false);
- if (!UserPacketLoader(pNode, pXMLDocumentNode))
- return nullptr;
-
pNode->SetXMLMappingNode(pXMLDocumentNode);
return pNode;
}
-CXFA_Node* CXFA_DocumentParser::UserPacketLoader(CXFA_Node* pXFANode,
- CFX_XMLNode* pXMLDoc) {
- return pXFANode;
-}
-
CXFA_Node* CXFA_DocumentParser::DataLoader(CXFA_Node* pXFANode,
CFX_XMLNode* pXMLDoc,
bool bDoTransform) {
@@ -842,24 +820,22 @@
XFA_Element eNodeType = XFA_Element::DataModel;
if (eNodeType == XFA_Element::DataModel) {
- WideString wsDataNodeAttr;
- if (FindAttributeWithNS(pXMLElement, L"dataNode",
- L"http://www.xfa.org/schema/xfa-data/1.0/",
- wsDataNodeAttr)) {
- if (wsDataNodeAttr.EqualsASCII("dataGroup"))
+ Optional<WideString> wsDataNodeAttr =
+ FindAttributeWithNS(pXMLElement, L"dataNode",
+ L"http://www.xfa.org/schema/xfa-data/1.0/");
+ if (wsDataNodeAttr.has_value()) {
+ if (wsDataNodeAttr.value().EqualsASCII("dataGroup"))
eNodeType = XFA_Element::DataGroup;
- else if (wsDataNodeAttr.EqualsASCII("dataValue"))
+ else if (wsDataNodeAttr.value().EqualsASCII("dataValue"))
eNodeType = XFA_Element::DataValue;
}
}
- WideString wsContentType;
if (eNodeType == XFA_Element::DataModel) {
- if (FindAttributeWithNS(pXMLElement, L"contentType",
- L"http://www.xfa.org/schema/xfa-data/1.0/",
- wsContentType)) {
- if (!wsContentType.IsEmpty())
- eNodeType = XFA_Element::DataValue;
- }
+ Optional<WideString> wsContentType =
+ FindAttributeWithNS(pXMLElement, L"contentType",
+ L"http://www.xfa.org/schema/xfa-data/1.0/");
+ if (wsContentType.has_value() && !wsContentType.value().IsEmpty())
+ eNodeType = XFA_Element::DataValue;
}
if (eNodeType == XFA_Element::DataModel) {
for (CFX_XMLNode* pXMLDataChild = pXMLElement->GetFirstChild();
diff --git a/xfa/fxfa/parser/cxfa_document_parser.h b/xfa/fxfa/parser/cxfa_document_parser.h
index 28b8d61..ad8d56c 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.h
+++ b/xfa/fxfa/parser/cxfa_document_parser.h
@@ -59,7 +59,6 @@
CXFA_Node* DataLoader(CXFA_Node* pXFANode,
CFX_XMLNode* pXMLDoc,
bool bDoTransform);
- CXFA_Node* UserPacketLoader(CXFA_Node* pXFANode, CFX_XMLNode* pXMLDoc);
void ParseContentNode(CXFA_Node* pXFANode,
CFX_XMLNode* pXMLNode,
XFA_PacketType ePacketID);