You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.6 KiB
66 lines
2.6 KiB
From 09be9031ce3e3ffb6cc40f45ac5e1a4192adcb15 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
Date: Wed, 2 Mar 2011 11:09:41 +0000
|
|
Subject: [PATCH] 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
|
|
---
|
|
unoxml/source/xpath/nodelist.cxx | 4 ++--
|
|
unoxml/source/xpath/nodelist.hxx | 4 ++--
|
|
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 b4e3313..884cf85 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 31b9b51..c917a7d 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 67a8f59..bbb8a5b 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));
|
|
}
|
|
|
|
/**
|
|
--
|
|
1.7.4.1
|
|
|