[Libreoffice-commits] core.git: sw/source
Stephan Bergmann (via logerrit)
logerrit at kemper.freedesktop.org
Wed Aug 28 12:43:22 UTC 2019
sw/source/filter/ww8/wrtw8nds.cxx | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
New commits:
commit 056e1fff2ed232f2a50db933fbade1c71c0c2a65
Author: Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Tue Aug 27 21:42:46 2019 +0200
Commit: Stephan Bergmann <sbergman at redhat.com>
CommitDate: Wed Aug 28 14:41:00 2019 +0200
Simplify code removing the last segment from a URL
This code had been introduced with 2b2f1352c72280dd25ed3bef090a3c708ee4b964
"tdf#86087 Save relative links in DOCX", but it is not clear to me what part
of <https://bugs.documentfoundation.org/show_bug.cgi?id=86087> "FILESAVE
FILEOPEN VIEWING: Can't open or save relative links in docx" it is meant to
address. None of the tests in `make check` trigger the
> else
> {
> // DOC
> WW8Export* pWW8Export = dynamic_cast<WW8Export*>(&GetExport());
> if ( pWW8Export )
> {
> SwWW8Writer& rWriter = pWW8Export->GetWriter();
> sExportedDocumentURL = rWriter.GetMedia()->GetURLObject().GetPath();
> }
> }
block.
But what the code presumably wants to do is to create, for the DOC case, an
anAbsoluteParent that is rWriter.GetMedia()->GetURLObject() with the final URL
path segment removed: INetURLObject::GetPath returns the "dirname" part of a
file URL's path (i.e., everything but the last path segment), and with a
trailing slash removed, in the form of a filesystem pathname. That means that
> INetURLObject anAbsoluteParent( sExportedDocumentURL );
creates an invalid anAbsoluteParent (because the input is not a URL), so
> if ( anAbsoluteParent.GetURLPath().isEmpty() )
is true (but why not use a more obvious check of anAbsoluteParent.HasError(),
or should this code also be relevant for the DOCX case?), so the following block
> {
> // DOC filter returns system path (without file:///)
> anAbsoluteParent.setFSysPath( sExportedDocumentURL, FSysStyle::Detect );
> anAbsoluteParent.setFinalSlash();
> }
recreated the URL from the filesystem pathname and added back the trailing
slash.
Change-Id: I9346a23680a65b6fd1ba0fa33f4565df50bd9e51
Reviewed-on: https://gerrit.libreoffice.org/78210
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman at redhat.com>
diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx
index 7336d8566d87..080e24bbfcdc 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -890,18 +890,14 @@ OUString AttributeOutputBase::ConvertURL( const OUString& rUrl, bool bAbsoluteOu
if ( pWW8Export )
{
SwWW8Writer& rWriter = pWW8Export->GetWriter();
- sExportedDocumentURL = rWriter.GetMedia()->GetURLObject().GetPath();
+ INetURLObject parent(rWriter.GetMedia()->GetURLObject());
+ parent.removeSegment();
+ sExportedDocumentURL = parent.GetMainURL(INetURLObject::DecodeMechanism::NONE);
}
}
}
INetURLObject anAbsoluteParent( sExportedDocumentURL );
- if ( anAbsoluteParent.GetURLPath().isEmpty() )
- {
- // DOC filter returns system path (without file:///)
- anAbsoluteParent.setFSysPath( sExportedDocumentURL, FSysStyle::Detect );
- anAbsoluteParent.setFinalSlash();
- }
OUString sConvertedParent = INetURLObject::GetScheme( anAbsoluteParent.GetProtocol() ) + anAbsoluteParent.GetURLPath();
OUString sParentPath = sConvertedParent.isEmpty() ? sExportedDocumentURL : sConvertedParent;
More information about the Libreoffice-commits
mailing list