Remove m_NodeStack from CFX_XMLParser

This CL removes the m_NodeStack member from the CFX_XMLParser. Instead
of using the node stack we retrieve the parent by getting the current
childs parent.

Change-Id: I0c4c220d14e35c5b6edc5c9c6a3008368f2d550a
Reviewed-on: https://pdfium-review.googlesource.com/31290
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index 651ebb4..685655e 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -72,8 +72,6 @@
   }
   m_pStream = proxy;
 
-  m_NodeStack.push(m_pParent);
-
   m_iXMLPlaneSize =
       std::min(m_iXMLPlaneSize,
                pdfium::base::checked_cast<size_t>(m_pStream->GetSize()));
@@ -117,12 +115,10 @@
           return false;
         }
 
-        if (!m_NodeStack.empty())
-          m_NodeStack.pop();
-        if (m_NodeStack.empty())
+        if (!m_pChild || !m_pChild->GetParent())
           return false;
 
-        m_pParent = m_NodeStack.top();
+        m_pParent = m_pChild->GetParent();
         m_pChild = m_pParent;
         iCount++;
         break;
@@ -142,7 +138,6 @@
         auto child = pdfium::MakeUnique<CFX_XMLElement>(GetTextData());
         m_pChild = child.get();
         m_pParent->AppendChild(std::move(child));
-        m_NodeStack.push(m_pChild);
         m_pParent = m_pChild;
         break;
       }
@@ -192,7 +187,7 @@
         break;
     }
   }
-  return m_NodeStack.size() != 1 ? false : GetStatus();
+  return !m_pParent || m_pParent->GetParent() ? false : GetStatus();
 }
 
 FX_XmlSyntaxResult CFX_XMLParser::DoSyntaxParse() {
diff --git a/core/fxcrt/xml/cfx_xmlparser.h b/core/fxcrt/xml/cfx_xmlparser.h
index 6db24e5..e2a2d5b 100644
--- a/core/fxcrt/xml/cfx_xmlparser.h
+++ b/core/fxcrt/xml/cfx_xmlparser.h
@@ -61,14 +61,10 @@
     AttriEqualSign,
     AttriQuotation,
     AttriValue,
-    Entity,
-    EntityDecimal,
-    EntityHex,
     CloseInstruction,
     BreakElement,
     CloseElement,
     SkipDeclNode,
-    DeclCharData,
     SkipComment,
     SkipCommentOrDecl,
     SkipCData,
@@ -86,7 +82,6 @@
   FX_FILESIZE m_End = 0;    // End position in m_Buffer
   FX_XmlSyntaxResult m_syntaxParserResult = FX_XmlSyntaxResult::None;
   FDE_XmlSyntaxState m_syntaxParserState = FDE_XmlSyntaxState::Text;
-  std::stack<CFX_XMLNode*> m_NodeStack;
   std::stack<FX_XMLNODETYPE> m_XMLNodeTypeStack;
   std::stack<wchar_t> m_SkipStack;
   std::vector<wchar_t> m_Buffer;