summaryrefslogtreecommitdiff
path: root/xfa
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2018-04-23 18:14:16 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-04-23 18:14:16 +0000
commit9a3a7709103a872037dcea1f3cf0b7785a3da191 (patch)
tree262538d8f7f8e5b9703a7c37e7ec2f1b477aebe3 /xfa
parentb557bdcbd1584a7e37f8883b0fc491e0641cfc9c (diff)
downloadpdfium-9a3a7709103a872037dcea1f3cf0b7785a3da191.tar.xz
Change CFX_XML Save to take a write stream
This CL changes CFX_XML to use an IFX_SeekableWriteStream instead of the more generic IFX_SeekableStream. Change-Id: I6e4def380c43eca755d91ad5cb6146c2dfdaee10 Reviewed-on: https://pdfium-review.googlesource.com/30877 Commit-Queue: dsinclair <dsinclair@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'xfa')
-rw-r--r--xfa/fxfa/cxfa_textlayout.cpp16
-rw-r--r--xfa/fxfa/cxfa_textparser.cpp6
-rw-r--r--xfa/fxfa/cxfa_textprovider.cpp6
-rw-r--r--xfa/fxfa/parser/cxfa_document_parser.cpp115
-rw-r--r--xfa/fxfa/parser/cxfa_xmllocale.cpp15
-rw-r--r--xfa/fxfa/parser/xfa_utils.cpp5
6 files changed, 78 insertions, 85 deletions
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 67b9ca4cb1..ac0eba70fa 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -78,13 +78,13 @@ CFX_XMLNode* CXFA_TextLayout::GetXMLContainerNode() {
return nullptr;
CFX_XMLNode* pXMLContainer = nullptr;
- for (CFX_XMLNode* pXMLChild = pXMLRoot->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
+ for (const auto& pXMLChild : *pXMLRoot) {
if (pXMLChild->GetType() == FX_XMLNODE_Element) {
- CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLChild);
+ CFX_XMLElement* pXMLElement =
+ static_cast<CFX_XMLElement*>(pXMLChild.get());
WideString wsTag = pXMLElement->GetLocalTagName();
if (wsTag == L"body" || wsTag == L"html") {
- pXMLContainer = pXMLChild;
+ pXMLContainer = pXMLChild.get();
break;
}
}
@@ -820,15 +820,15 @@ bool CXFA_TextLayout::LoadRichText(
}
}
- for (CFX_XMLNode* pChildNode = pXMLNode->GetFirstChild(); pChildNode;
- pChildNode = pChildNode->GetNextSibling()) {
+ for (const auto& pChildNode : *pXMLNode) {
if (bCurOl)
iLiCount++;
- if (!LoadRichText(pChildNode, textWidth, fLinePos,
+ if (!LoadRichText(pChildNode.get(), textWidth, fLinePos,
pContext ? pStyle : pParentStyle, bSavePieces,
- pLinkData, true, bIsOl, iLiCount))
+ pLinkData, true, bIsOl, iLiCount)) {
return false;
+ }
}
if (m_pLoader) {
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index f0a6dd2af1..5ceacf79c2 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -245,10 +245,8 @@ void CXFA_TextParser::ParseRichText(CFX_XMLNode* pXMLNode,
m_mapXMLNodeToParseContext[pXMLNode] = std::move(pTextContext);
}
- for (CFX_XMLNode* pXMLChild = pXMLNode->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
- ParseRichText(pXMLChild, pNewStyle.Get());
- }
+ for (const auto& pXMLChild : *pXMLNode)
+ ParseRichText(pXMLChild.get(), pNewStyle.Get());
}
bool CXFA_TextParser::TagValidate(const WideString& wsName) const {
diff --git a/xfa/fxfa/cxfa_textprovider.cpp b/xfa/fxfa/cxfa_textprovider.cpp
index 60c52942ed..39c8c90680 100644
--- a/xfa/fxfa/cxfa_textprovider.cpp
+++ b/xfa/fxfa/cxfa_textprovider.cpp
@@ -62,10 +62,10 @@ CXFA_Node* CXFA_TextProvider::GetTextNode(bool& bRichText) {
CXFA_Node* pBind = m_pNode->GetBindData();
CFX_XMLNode* pXMLNode = pBind->GetXMLMappingNode();
ASSERT(pXMLNode);
- for (CFX_XMLNode* pXMLChild = pXMLNode->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
+ for (const auto& pXMLChild : *pXMLNode) {
if (pXMLChild->GetType() == FX_XMLNODE_Element) {
- CFX_XMLElement* pElement = static_cast<CFX_XMLElement*>(pXMLChild);
+ CFX_XMLElement* pElement =
+ static_cast<CFX_XMLElement*>(pXMLChild.get());
if (XFA_RecognizeRichText(pElement))
bRichText = true;
}
diff --git a/xfa/fxfa/parser/cxfa_document_parser.cpp b/xfa/fxfa/parser/cxfa_document_parser.cpp
index e4f85f2bac..21d531d9f9 100644
--- a/xfa/fxfa/parser/cxfa_document_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_document_parser.cpp
@@ -100,12 +100,10 @@ const PacketInfo* GetPacketByName(const WideStringView& wsName) {
}
CFX_XMLNode* GetDocumentNode(CFX_XMLNode* pRootNode) {
- for (CFX_XMLNode* pXMLNode = pRootNode->GetFirstChild(); pXMLNode;
- pXMLNode = pXMLNode->GetNextSibling()) {
+ for (const auto& pXMLNode : *pRootNode) {
if (pXMLNode->GetType() != FX_XMLNODE_Element)
continue;
-
- return pXMLNode;
+ return pXMLNode.get();
}
return nullptr;
}
@@ -232,11 +230,10 @@ CFX_XMLNode* GetDataSetsFromXDP(CFX_XMLNode* pXMLDocumentNode) {
return nullptr;
}
- for (CFX_XMLNode* pDatasetsNode = pXMLDocumentNode->GetFirstChild();
- pDatasetsNode; pDatasetsNode = pDatasetsNode->GetNextSibling()) {
- if (MatchNodeName(pDatasetsNode, datasets_packet->name,
+ for (const auto& pDatasetsNode : *pXMLDocumentNode) {
+ if (MatchNodeName(pDatasetsNode.get(), datasets_packet->name,
datasets_packet->uri, datasets_packet->flags)) {
- return pDatasetsNode;
+ return pDatasetsNode.get();
}
}
return nullptr;
@@ -248,19 +245,19 @@ bool IsStringAllWhitespace(WideString wsText) {
}
void ConvertXMLToPlainText(CFX_XMLElement* pRootXMLNode, WideString& wsOutput) {
- for (CFX_XMLNode* pXMLChild = pRootXMLNode->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
+ for (const auto& pXMLChild : *pRootXMLNode) {
switch (pXMLChild->GetType()) {
case FX_XMLNODE_Element: {
WideString wsTextData =
- static_cast<CFX_XMLElement*>(pXMLChild)->GetTextData();
+ static_cast<CFX_XMLElement*>(pXMLChild.get())->GetTextData();
wsTextData += L"\n";
wsOutput += wsTextData;
break;
}
case FX_XMLNODE_Text:
case FX_XMLNODE_CharData: {
- WideString wsText = static_cast<CFX_XMLText*>(pXMLChild)->GetText();
+ WideString wsText =
+ static_cast<CFX_XMLText*>(pXMLChild.get())->GetText();
if (IsStringAllWhitespace(wsText))
continue;
@@ -307,10 +304,9 @@ WideString GetPlainTextFromRichText(CFX_XMLNode* pXMLNode) {
default:
break;
}
- for (CFX_XMLNode* pChildXML = pXMLNode->GetFirstChild(); pChildXML;
- pChildXML = pChildXML->GetNextSibling()) {
- wsPlainText += GetPlainTextFromRichText(pChildXML);
- }
+
+ for (const auto& pChildXML : *pXMLNode)
+ wsPlainText += GetPlainTextFromRichText(pChildXML.get());
return wsPlainText;
}
@@ -360,8 +356,7 @@ void CXFA_DocumentParser::ConstructXFANode(CXFA_Node* pXFANode,
XFA_PacketType ePacketID = pXFANode->GetPacketType();
if (ePacketID == XFA_PacketType::Datasets) {
if (pXFANode->GetElementType() == XFA_Element::DataValue) {
- for (CFX_XMLNode* pXMLChild = pXMLNode->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
+ for (const auto& pXMLChild : *pXMLNode) {
FX_XMLNODETYPE eNodeType = pXMLChild->GetType();
if (eNodeType == FX_XMLNODE_Instruction)
continue;
@@ -372,7 +367,7 @@ void CXFA_DocumentParser::ConstructXFANode(CXFA_Node* pXFANode,
if (!pXFAChild)
return;
- CFX_XMLElement* child = static_cast<CFX_XMLElement*>(pXMLChild);
+ CFX_XMLElement* child = static_cast<CFX_XMLElement*>(pXMLChild.get());
WideString wsNodeStr = child->GetLocalTagName();
pXFAChild->JSObject()->SetCData(XFA_Attribute::Name, wsNodeStr, false,
false);
@@ -382,7 +377,7 @@ void CXFA_DocumentParser::ConstructXFANode(CXFA_Node* pXFANode,
false, false);
pXFANode->InsertChild(pXFAChild, nullptr);
- pXFAChild->SetXMLMappingNode(pXMLChild);
+ pXFAChild->SetXMLMappingNode(pXMLChild.get());
pXFAChild->SetFlag(XFA_NodeFlag_Initialized);
break;
}
@@ -461,17 +456,16 @@ CXFA_Node* CXFA_DocumentParser::ParseAsXDPPacket_XDP(
CFX_XMLNode* pXMLConfigDOMRoot = nullptr;
CXFA_Node* pXFAConfigDOMRoot = nullptr;
- for (CFX_XMLNode* pChildItem = pXMLDocumentNode->GetFirstChild(); pChildItem;
- pChildItem = pChildItem->GetNextSibling()) {
+ for (const auto& pChildItem : *pXMLDocumentNode) {
const PacketInfo* pPacketInfo = GetPacketByIndex(XFA_PacketType::Config);
- if (!MatchNodeName(pChildItem, pPacketInfo->name, pPacketInfo->uri,
+ if (!MatchNodeName(pChildItem.get(), pPacketInfo->name, pPacketInfo->uri,
pPacketInfo->flags)) {
continue;
}
if (pXFARootNode->GetFirstChildByName(pPacketInfo->hash))
return nullptr;
- pXMLConfigDOMRoot = pChildItem;
+ pXMLConfigDOMRoot = pChildItem.get();
pXFAConfigDOMRoot = ParseAsXDPPacket_Config(pXMLConfigDOMRoot);
if (pXFAConfigDOMRoot)
pXFARootNode->InsertChild(pXFAConfigDOMRoot, nullptr);
@@ -480,14 +474,14 @@ CXFA_Node* CXFA_DocumentParser::ParseAsXDPPacket_XDP(
CFX_XMLNode* pXMLDatasetsDOMRoot = nullptr;
CFX_XMLNode* pXMLFormDOMRoot = nullptr;
CFX_XMLNode* pXMLTemplateDOMRoot = nullptr;
- for (CFX_XMLNode* pChildItem = pXMLDocumentNode->GetFirstChild(); pChildItem;
- pChildItem = pChildItem->GetNextSibling()) {
- if (!pChildItem || pChildItem->GetType() != FX_XMLNODE_Element)
+ for (const auto& pChildItem : *pXMLDocumentNode) {
+ if (pChildItem->GetType() != FX_XMLNODE_Element)
continue;
- if (pChildItem == pXMLConfigDOMRoot)
+ if (pChildItem.get() == pXMLConfigDOMRoot)
continue;
- CFX_XMLElement* pElement = reinterpret_cast<CFX_XMLElement*>(pChildItem);
+ CFX_XMLElement* pElement =
+ reinterpret_cast<CFX_XMLElement*>(pChildItem.get());
WideString wsPacketName = pElement->GetLocalTagName();
const PacketInfo* pPacketInfo =
GetPacketByName(wsPacketName.AsStringView());
@@ -771,11 +765,11 @@ CXFA_Node* CXFA_DocumentParser::NormalLoader(CXFA_Node* pXFANode,
XFA_PacketType ePacketID,
bool bUseAttribute) {
bool bOneOfPropertyFound = false;
- for (CFX_XMLNode* pXMLChild = pXMLDoc->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
+ for (const auto& pXMLChild : *pXMLDoc) {
switch (pXMLChild->GetType()) {
case FX_XMLNODE_Element: {
- CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLChild);
+ CFX_XMLElement* pXMLElement =
+ static_cast<CFX_XMLElement*>(pXMLChild.get());
WideString wsTagName = pXMLElement->GetLocalTagName();
XFA_Element eType = CXFA_Node::NameToElement(wsTagName);
if (eType == XFA_Element::Unknown)
@@ -837,9 +831,11 @@ CXFA_Node* CXFA_DocumentParser::NormalLoader(CXFA_Node* pXFANode,
NormalLoader(pXFAChild, pXMLElement, ePacketID, bUseAttribute);
break;
}
- } break;
+ break;
+ }
case FX_XMLNODE_Instruction:
- ParseInstruction(pXFANode, static_cast<CFX_XMLInstruction*>(pXMLChild),
+ ParseInstruction(pXFANode,
+ static_cast<CFX_XMLInstruction*>(pXMLChild.get()),
ePacketID);
break;
default:
@@ -865,8 +861,7 @@ void CXFA_DocumentParser::ParseContentNode(CXFA_Node* pXFANode,
pXFANode->SetXMLMappingNode(pXMLNode);
WideString wsValue;
- for (CFX_XMLNode* pXMLChild = pXMLNode->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
+ for (const auto& pXMLChild : *pXMLNode) {
FX_XMLNODETYPE eNodeType = pXMLChild->GetType();
if (eNodeType == FX_XMLNODE_Instruction)
continue;
@@ -875,19 +870,20 @@ void CXFA_DocumentParser::ParseContentNode(CXFA_Node* pXFANode,
if (eNodeType != FX_XMLNODE_Element)
break;
- if (XFA_RecognizeRichText(static_cast<CFX_XMLElement*>(pXMLChild)))
- wsValue +=
- GetPlainTextFromRichText(static_cast<CFX_XMLElement*>(pXMLChild));
+ if (XFA_RecognizeRichText(static_cast<CFX_XMLElement*>(pXMLChild.get())))
+ wsValue += GetPlainTextFromRichText(
+ static_cast<CFX_XMLElement*>(pXMLChild.get()));
} else if (element == XFA_Element::Sharpxml) {
if (eNodeType != FX_XMLNODE_Element)
break;
- ConvertXMLToPlainText(static_cast<CFX_XMLElement*>(pXMLChild), wsValue);
+ ConvertXMLToPlainText(static_cast<CFX_XMLElement*>(pXMLChild.get()),
+ wsValue);
} else {
if (eNodeType == FX_XMLNODE_Element)
break;
if (eNodeType == FX_XMLNODE_Text || eNodeType == FX_XMLNODE_CharData)
- wsValue = static_cast<CFX_XMLText*>(pXMLChild)->GetText();
+ wsValue = static_cast<CFX_XMLText*>(pXMLChild.get())->GetText();
}
break;
}
@@ -909,11 +905,11 @@ void CXFA_DocumentParser::ParseContentNode(CXFA_Node* pXFANode,
void CXFA_DocumentParser::ParseDataGroup(CXFA_Node* pXFANode,
CFX_XMLNode* pXMLNode,
XFA_PacketType ePacketID) {
- for (CFX_XMLNode* pXMLChild = pXMLNode->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
+ for (const auto& pXMLChild : *pXMLNode) {
switch (pXMLChild->GetType()) {
case FX_XMLNODE_Element: {
- CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLChild);
+ CFX_XMLElement* pXMLElement =
+ static_cast<CFX_XMLElement*>(pXMLChild.get());
{
WideString wsNamespaceURI = GetElementTagNamespaceURI(pXMLElement);
if (wsNamespaceURI == L"http://www.xfa.com/schema/xfa-package/" ||
@@ -945,11 +941,10 @@ void CXFA_DocumentParser::ParseDataGroup(CXFA_Node* pXFANode,
}
}
if (eNodeType == XFA_Element::DataModel) {
- for (CFX_XMLNode* pXMLDataChild = pXMLElement->GetFirstChild();
- pXMLDataChild; pXMLDataChild = pXMLDataChild->GetNextSibling()) {
+ for (const auto& pXMLDataChild : *pXMLElement) {
if (pXMLDataChild->GetType() == FX_XMLNODE_Element) {
if (!XFA_RecognizeRichText(
- static_cast<CFX_XMLElement*>(pXMLDataChild))) {
+ static_cast<CFX_XMLElement*>(pXMLDataChild.get()))) {
eNodeType = XFA_Element::DataGroup;
break;
}
@@ -1010,7 +1005,7 @@ void CXFA_DocumentParser::ParseDataGroup(CXFA_Node* pXFANode,
if (eNodeType == XFA_Element::DataGroup)
ParseDataGroup(pXFAChild, pXMLElement, ePacketID);
else if (bNeedValue)
- ParseDataValue(pXFAChild, pXMLChild, XFA_PacketType::Datasets);
+ ParseDataValue(pXFAChild, pXMLChild.get(), XFA_PacketType::Datasets);
pXFAChild->SetXMLMappingNode(pXMLElement);
pXFAChild->SetFlag(XFA_NodeFlag_Initialized);
@@ -1018,7 +1013,7 @@ void CXFA_DocumentParser::ParseDataGroup(CXFA_Node* pXFANode,
}
case FX_XMLNODE_CharData:
case FX_XMLNODE_Text: {
- CFX_XMLText* pXMLText = static_cast<CFX_XMLText*>(pXMLChild);
+ CFX_XMLText* pXMLText = static_cast<CFX_XMLText*>(pXMLChild.get());
WideString wsText = pXMLText->GetText();
if (IsStringAllWhitespace(wsText))
continue;
@@ -1048,23 +1043,23 @@ void CXFA_DocumentParser::ParseDataValue(CXFA_Node* pXFANode,
CFX_WideTextBuf wsCurValueTextBuf;
bool bMarkAsCompound = false;
CFX_XMLNode* pXMLCurValueNode = nullptr;
- for (CFX_XMLNode* pXMLChild = pXMLNode->GetFirstChild(); pXMLChild;
- pXMLChild = pXMLChild->GetNextSibling()) {
+ for (const auto& pXMLChild : *pXMLNode) {
FX_XMLNODETYPE eNodeType = pXMLChild->GetType();
if (eNodeType == FX_XMLNODE_Instruction)
continue;
if (eNodeType == FX_XMLNODE_Text || eNodeType == FX_XMLNODE_CharData) {
- WideString wsText = static_cast<CFX_XMLText*>(pXMLChild)->GetText();
+ WideString wsText = static_cast<CFX_XMLText*>(pXMLChild.get())->GetText();
if (!pXMLCurValueNode)
- pXMLCurValueNode = pXMLChild;
+ pXMLCurValueNode = pXMLChild.get();
wsCurValueTextBuf << wsText;
- } else if (XFA_RecognizeRichText(static_cast<CFX_XMLElement*>(pXMLChild))) {
- WideString wsText =
- GetPlainTextFromRichText(static_cast<CFX_XMLElement*>(pXMLChild));
+ } else if (XFA_RecognizeRichText(
+ static_cast<CFX_XMLElement*>(pXMLChild.get()))) {
+ WideString wsText = GetPlainTextFromRichText(
+ static_cast<CFX_XMLElement*>(pXMLChild.get()));
if (!pXMLCurValueNode)
- pXMLCurValueNode = pXMLChild;
+ pXMLCurValueNode = pXMLChild.get();
wsCurValueTextBuf << wsText;
} else {
@@ -1095,12 +1090,12 @@ void CXFA_DocumentParser::ParseDataValue(CXFA_Node* pXFANode,
return;
WideString wsNodeStr =
- static_cast<CFX_XMLElement*>(pXMLChild)->GetLocalTagName();
+ static_cast<CFX_XMLElement*>(pXMLChild.get())->GetLocalTagName();
pXFAChild->JSObject()->SetCData(XFA_Attribute::Name, wsNodeStr, false,
false);
- ParseDataValue(pXFAChild, pXMLChild, ePacketID);
+ ParseDataValue(pXFAChild, pXMLChild.get(), ePacketID);
pXFANode->InsertChild(pXFAChild, nullptr);
- pXFAChild->SetXMLMappingNode(pXMLChild);
+ pXFAChild->SetXMLMappingNode(pXMLChild.get());
pXFAChild->SetFlag(XFA_NodeFlag_Initialized);
WideString wsCurValue =
pXFAChild->JSObject()->GetCData(XFA_Attribute::Value);
diff --git a/xfa/fxfa/parser/cxfa_xmllocale.cpp b/xfa/fxfa/parser/cxfa_xmllocale.cpp
index ffb4cd9dde..cbee75725a 100644
--- a/xfa/fxfa/parser/cxfa_xmllocale.cpp
+++ b/xfa/fxfa/parser/cxfa_xmllocale.cpp
@@ -38,11 +38,10 @@ std::unique_ptr<CXFA_XMLLocale> CXFA_XMLLocale::Create(
return nullptr;
CFX_XMLElement* locale = nullptr;
- for (auto* child = root->GetFirstChild(); child;
- child = child->GetNextSibling()) {
+ for (const auto& child : *(root.get())) {
if (child->GetType() != FX_XMLNODE_Element)
continue;
- CFX_XMLElement* elem = static_cast<CFX_XMLElement*>(child);
+ CFX_XMLElement* elem = static_cast<CFX_XMLElement*>(child.get());
if (elem->GetName() == L"locale") {
locale = elem;
break;
@@ -126,12 +125,11 @@ WideString CXFA_XMLLocale::GetCalendarSymbol(const WideStringView& symbol,
WideString pstrSymbolNames = symbol + L"Names";
CFX_XMLElement* name_child = nullptr;
- for (auto* name = child->GetFirstChild(); name;
- name = name->GetNextSibling()) {
+ for (const auto& name : *child) {
if (name->GetType() != FX_XMLNODE_Element)
continue;
- auto* elem = static_cast<CFX_XMLElement*>(name);
+ auto* elem = static_cast<CFX_XMLElement*>(name.get());
if (elem->GetName() != pstrSymbolNames)
continue;
@@ -210,12 +208,11 @@ WideString CXFA_XMLLocale::GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const {
WideString CXFA_XMLLocale::GetPattern(CFX_XMLElement* patterns,
const WideStringView& bsTag,
const WideStringView& wsName) const {
- for (auto* child = patterns->GetFirstChild(); child;
- child = child->GetNextSibling()) {
+ for (const auto& child : *patterns) {
if (child->GetType() != FX_XMLNODE_Element)
continue;
- CFX_XMLElement* pattern = static_cast<CFX_XMLElement*>(child);
+ CFX_XMLElement* pattern = static_cast<CFX_XMLElement*>(child.get());
if (pattern->GetName() != bsTag)
continue;
if (pattern->GetAttribute(L"name") != wsName)
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index de0f76b6b4..876cdf0c75 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -211,7 +211,10 @@ void RegenerateFormFile_Changed(CXFA_Node* pNode,
if (!pExDataXML)
break;
- CFX_XMLNode* pRichTextXML = pExDataXML->GetFirstChild();
+ if (pExDataXML->begin() == pExDataXML->end())
+ return;
+
+ CFX_XMLNode* pRichTextXML = pExDataXML->begin()->get();
if (!pRichTextXML)
break;