summaryrefslogtreecommitdiff
path: root/sfx2/source/doc/docfile.cxx
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2018-09-03 21:07:00 +0200
committerMiklos Vajna <vmiklos@collabora.co.uk>2018-09-04 14:33:37 +0200
commit72be5ac08aa963bdd42d2e56a62f43e69f728caa (patch)
tree47bae4c7269b1ff724171bf856a6da3fb9ac5755 /sfx2/source/doc/docfile.cxx
parentb9757f5cfdb62b24e79eeb4c0ef0c8b98056cecf (diff)
tdf#119381 sfx2 store: don't break symlink targets
osl::File::move() would not follow symlinks for the target, so don't move the file in that case. Change-Id: I907e1ba8db04dad670c884ea0283947f953117da Reviewed-on: https://gerrit.libreoffice.org/59949 Tested-by: Jenkins Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk>
Diffstat (limited to 'sfx2/source/doc/docfile.cxx')
-rw-r--r--sfx2/source/doc/docfile.cxx11
1 files changed, 6 insertions, 5 deletions
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index f8f5c85f757b..5d1888a60d5c 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -200,8 +200,8 @@ sal_uInt64 GetDefaultFileAttributes(const OUString& rURL)
return nRet;
}
-/// Determines if rURL is a non-hard-linked file:// URL.
-bool IsNotHardLinkedFile(const OUString& rURL)
+/// Determines if rURL is a non-linked (symlink or hardlink) file:// URL.
+bool IsNotLinkedFile(const OUString& rURL)
{
if (!comphelper::isFileUrl(rURL))
return false;
@@ -212,10 +212,11 @@ bool IsNotHardLinkedFile(const OUString& rURL)
return false;
struct stat buf;
- if (stat(rPath.toUtf8().getStr(), &buf) != 0)
+ if (lstat(rPath.toUtf8().getStr(), &buf) != 0)
return false;
- if (buf.st_nlink > 1)
+ // Hardlink or symlink: osl::File::move() doesn't play with these nicely.
+ if (buf.st_nlink > 1 || S_ISLNK(buf.st_mode))
return false;
#endif
@@ -1843,7 +1844,7 @@ void SfxMedium::TransactedTransferForFS_Impl( const INetURLObject& aSource,
OUString aDestMainURL = aDest.GetMainURL(INetURLObject::DecodeMechanism::NONE);
sal_uInt64 nAttributes = GetDefaultFileAttributes(aDestMainURL);
- if (IsNotHardLinkedFile(aDestMainURL) && osl::File::move(aSourceMainURL, aDestMainURL) == osl::FileBase::E_None)
+ if (IsNotLinkedFile(aDestMainURL) && osl::File::move(aSourceMainURL, aDestMainURL) == osl::FileBase::E_None)
{
if (nAttributes)
// Adjust attributes, source might be created with