From 0ac54766877eba95982e2364b8b2b25ff7382534 Mon Sep 17 00:00:00 2001 From: Henning Brinkmann Date: Wed, 16 Feb 2011 12:43:17 +0100 Subject: #i116755# handle absolute paths in _rel [hg:fb7e1780f025] --- writerfilter/source/ooxml/OOXMLStreamImpl.cxx | 38 ++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'writerfilter/source/ooxml') diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx index 386442c79..e5019d644 100644 --- a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx +++ b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx @@ -94,6 +94,42 @@ const ::rtl::OUString & OOXMLStreamImpl::getTarget() const return msTarget; } +::rtl::OUString lcl_normalizeTarget(const ::rtl::OUString & s) +{ + const int nStringsToCut = 2; + const ::rtl::OUString aStringToCut[] = { + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("./")), + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) + }; + + bool bDone = false; + sal_Int32 nIndex = 0; + while (!bDone) + { + for (int n = 0; n <= nStringsToCut; n++) + { + if (n == nStringsToCut) + { + bDone = true; + } + else + { + sal_Int32 nNewIndex = s.indexOf(aStringToCut[n], nIndex); + + if (nIndex == nNewIndex) + { + sal_Int32 nLength = aStringToCut[n].getLength(); + nIndex += nLength; + + break; + } + } + } + } + + return s.copy(nIndex); +} + bool OOXMLStreamImpl::lcl_getTarget(uno::Reference xRelationshipAccess, StreamType_t nStreamType, @@ -188,7 +224,7 @@ bool OOXMLStreamImpl::lcl_getTarget(uno::Reference else { rDocumentTarget = msPath; - rDocumentTarget += sMyTarget; + rDocumentTarget += lcl_normalizeTarget(sMyTarget); } break; -- cgit v1.2.3