diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-03-02 11:09:41 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-03-02 11:09:41 +0000 |
commit | 09be9031ce3e3ffb6cc40f45ac5e1a4192adcb15 (patch) | |
tree | 7cba658688ac3a6bf6827716622e9433ebe1fc8e | |
parent | 657bbb68e86516c44fdd31d8b2e3d0c14ddc6a6e (diff) |
Resolves: fdo#33701 ensure node outlives path
The xpath on destruction needs the xmldoc to exist, so the reference
to the doc-owning nodelist needs to be the first reference listed
in the class in order that its dtor is called *after* the xpath
dtor
-rw-r--r-- | unoxml/source/xpath/nodelist.cxx | 4 | ||||
-rw-r--r-- | unoxml/source/xpath/nodelist.hxx | 4 | ||||
-rw-r--r-- | unoxml/source/xpath/xpathobject.cxx | 2 |
3 files changed, 5 insertions, 5 deletions
diff --git a/unoxml/source/xpath/nodelist.cxx b/unoxml/source/xpath/nodelist.cxx index b4e331328..884cf853a 100644 --- a/unoxml/source/xpath/nodelist.cxx +++ b/unoxml/source/xpath/nodelist.cxx @@ -31,8 +31,8 @@ namespace XPath { - CNodeList::CNodeList(boost::shared_ptr<xmlXPathObject>& rxpathObj, const Reference< XNode >& contextNode) - : m_xContextNode(contextNode) + CNodeList::CNodeList(const Reference< XNode >& rContextNode, boost::shared_ptr<xmlXPathObject>& rxpathObj) + : m_xContextNode(rContextNode) , m_pNodeSet(0) { if (rxpathObj != NULL && rxpathObj->type == XPATH_NODESET) diff --git a/unoxml/source/xpath/nodelist.hxx b/unoxml/source/xpath/nodelist.hxx index 31b9b51a4..c917a7d56 100644 --- a/unoxml/source/xpath/nodelist.hxx +++ b/unoxml/source/xpath/nodelist.hxx @@ -53,12 +53,12 @@ namespace XPath class CNodeList : public cppu::WeakImplHelper1< XNodeList > { private: - boost::shared_ptr<xmlXPathObject> m_pXPathObj; const Reference< XNode > m_xContextNode; + boost::shared_ptr<xmlXPathObject> m_pXPathObj; xmlNodeSetPtr m_pNodeSet; public: - CNodeList(boost::shared_ptr<xmlXPathObject> &rxpathObj, const Reference< XNode >& contextNode); + CNodeList(const Reference< XNode >& contextNode, boost::shared_ptr<xmlXPathObject> &rxpathObj); /** The number of nodes in the list. */ diff --git a/unoxml/source/xpath/xpathobject.cxx b/unoxml/source/xpath/xpathobject.cxx index 67a8f59b7..bbb8a5b4e 100644 --- a/unoxml/source/xpath/xpathobject.cxx +++ b/unoxml/source/xpath/xpathobject.cxx @@ -86,7 +86,7 @@ namespace XPath */ Reference< XNodeList > SAL_CALL CXPathObject::getNodeList() throw (RuntimeException) { - return Reference< XNodeList >(new CNodeList(m_pXPathObj, m_xContextNode)); + return Reference< XNodeList >(new CNodeList(m_xContextNode, m_pXPathObj)); } /** |