Use unowned ptr to Node from outside XFA node tree. Change-Id: Idcd992224fc5411c97f3001293af83a6c581e695 Reviewed-on: https://pdfium-review.googlesource.com/36991 Reviewed-by: dsinclair <dsinclair@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/cfxjse_engine.cpp b/fxjs/cfxjse_engine.cpp index 78b152b..9b54555 100644 --- a/fxjs/cfxjse_engine.cpp +++ b/fxjs/cfxjse_engine.cpp
@@ -624,7 +624,7 @@ dwStyles |= XFA_RESOLVENODE_Bind; findObjects.clear(); findObjects.push_back( - m_ResolveProcessor->GetNodeHelper()->m_pAllStartParent); + m_ResolveProcessor->GetNodeHelper()->m_pAllStartParent.Get()); continue; } break; @@ -724,7 +724,7 @@ XFA_RESOLVENODE_BindNew)) { CXFA_NodeHelper* helper = m_ResolveProcessor->GetNodeHelper(); if (helper->m_pCreateParent) - resolveNodeRS->objects.push_back(helper->m_pCreateParent); + resolveNodeRS->objects.push_back(helper->m_pCreateParent.Get()); else helper->CreateNode_ForCondition(rndFind.m_wsCondition);
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.cpp b/xfa/fxfa/parser/cxfa_nodehelper.cpp index 7eddddf..e4fb866 100644 --- a/xfa/fxfa/parser/cxfa_nodehelper.cpp +++ b/xfa/fxfa/parser/cxfa_nodehelper.cpp
@@ -17,15 +17,9 @@ #include "xfa/fxfa/parser/xfa_resolvenode_rs.h" #include "xfa/fxfa/parser/xfa_utils.h" -CXFA_NodeHelper::CXFA_NodeHelper() - : m_eLastCreateType(XFA_Element::DataValue), - m_pCreateParent(nullptr), - m_iCreateCount(0), - m_iCreateFlag(XFA_ResolveNode_RSType_CreateNodeOne), - m_iCurAllStart(-1), - m_pAllStartParent(nullptr) {} +CXFA_NodeHelper::CXFA_NodeHelper() = default; -CXFA_NodeHelper::~CXFA_NodeHelper() {} +CXFA_NodeHelper::~CXFA_NodeHelper() = default; CXFA_Node* CXFA_NodeHelper::ResolveNodes_GetOneChild(CXFA_Node* parent, const wchar_t* pwsName,
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.h b/xfa/fxfa/parser/cxfa_nodehelper.h index e13387e..b53e1f4 100644 --- a/xfa/fxfa/parser/cxfa_nodehelper.h +++ b/xfa/fxfa/parser/cxfa_nodehelper.h
@@ -61,12 +61,12 @@ void SetCreateNodeType(CXFA_Node* refNode); bool NodeIsProperty(CXFA_Node* refNode); - XFA_Element m_eLastCreateType; - CXFA_Node* m_pCreateParent; - int32_t m_iCreateCount; - XFA_ResolveNode_RSType m_iCreateFlag; - int32_t m_iCurAllStart; - CXFA_Node* m_pAllStartParent; + XFA_Element m_eLastCreateType = XFA_Element::DataValue; + XFA_ResolveNode_RSType m_iCreateFlag = XFA_ResolveNode_RSType_CreateNodeOne; + int32_t m_iCreateCount = 0; + int32_t m_iCurAllStart = -1; + UnownedPtr<CXFA_Node> m_pCreateParent; + UnownedPtr<CXFA_Node> m_pAllStartParent; }; #endif // XFA_FXFA_PARSER_CXFA_NODEHELPER_H_
diff --git a/xfa/fxfa/parser/cxfa_thisproxy.h b/xfa/fxfa/parser/cxfa_thisproxy.h index 4bb0f5a..197a97d 100644 --- a/xfa/fxfa/parser/cxfa_thisproxy.h +++ b/xfa/fxfa/parser/cxfa_thisproxy.h
@@ -7,21 +7,21 @@ #ifndef XFA_FXFA_PARSER_CXFA_THISPROXY_H_ #define XFA_FXFA_PARSER_CXFA_THISPROXY_H_ +#include "core/fxcrt/unowned_ptr.h" +#include "xfa/fxfa/parser/cxfa_node.h" #include "xfa/fxfa/parser/cxfa_object.h" -class CXFA_Node; - class CXFA_ThisProxy : public CXFA_Object { public: CXFA_ThisProxy(CXFA_Node* pThisNode, CXFA_Node* pScriptNode); ~CXFA_ThisProxy() override; - CXFA_Node* GetThisNode() const { return m_pThisNode; } - CXFA_Node* GetScriptNode() const { return m_pScriptNode; } + CXFA_Node* GetThisNode() const { return m_pThisNode.Get(); } + CXFA_Node* GetScriptNode() const { return m_pScriptNode.Get(); } private: - CXFA_Node* m_pThisNode; - CXFA_Node* m_pScriptNode; + UnownedPtr<CXFA_Node> m_pThisNode; + UnownedPtr<CXFA_Node> m_pScriptNode; }; #endif // XFA_FXFA_PARSER_CXFA_THISPROXY_H_