summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2019-11-15 08:45:20 +0100
committerTor Lillqvist <tml@collabora.com>2021-04-16 17:49:56 +0200
commit9a3566d743a1ab3e547145f28927a2c695d256b5 (patch)
treec87ce7149136d0853ec6bfa95f9fc1308c51e8f9
parent2fb8a0c9e18801f9addb3513d6e7b4b16574bded (diff)
tdf#128538: Open filesystem directories in Finder after allco-6.2-30distro/collabora/cp-6.2
Where option "-R" means, according to the open(1) man page: "Reveals the file(s) in the Finder instead of opening them." This appears to always reveal in Finder, even for *.app "application directories", so should not affect CVE-2019-9847.) Change-Id: I775db7bf71c09adc6570931a977b82dfee8dc95a Reviewed-on: https://gerrit.libreoffice.org/82749 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sbergman@redhat.com> (cherry picked from commit 1ff1466b055890b2ca0ff3a47262bc048ad78542) Reviewed-on: https://gerrit.libreoffice.org/82756 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114213 Reviewed-by: Tor Lillqvist <tml@collabora.com> Tested-by: Tor Lillqvist <tml@collabora.com>
-rw-r--r--shell/source/unix/exec/shellexec.cxx13
1 files changed, 10 insertions, 3 deletions
diff --git a/shell/source/unix/exec/shellexec.cxx b/shell/source/unix/exec/shellexec.cxx
index 86c3672162c0..0810b0534112 100644
--- a/shell/source/unix/exec/shellexec.cxx
+++ b/shell/source/unix/exec/shellexec.cxx
@@ -117,6 +117,7 @@ void SAL_CALL ShellExec::execute( const OUString& aCommand, const OUString& aPar
}
#ifdef MACOSX
+ bool dir = false;
if (uri->getScheme().equalsIgnoreAsciiCase("file")) {
OUString pathname;
auto const e1 = osl::FileBase::getSystemPathFromFileURL(aCommand, pathname);
@@ -142,8 +143,10 @@ void SAL_CALL ShellExec::execute( const OUString& aCommand, const OUString& aPar
auto const e3 = errno;
SAL_INFO("shell", "stat(" << pathname8 << ") failed with errno " << e3);
}
- if (e2 != 0 || !S_ISREG(st.st_mode)
- || (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) != 0)
+ if (e2 == 0 && S_ISDIR(st.st_mode)) {
+ dir = true;
+ } else if (e2 != 0 || !S_ISREG(st.st_mode)
+ || (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)) != 0)
{
throw css::lang::IllegalArgumentException(
"XSystemShellExecute.execute, cannot process <" + aCommand + ">", {}, 0);
@@ -176,7 +179,11 @@ void SAL_CALL ShellExec::execute( const OUString& aCommand, const OUString& aPar
// 2.4 If it does not match an exitsting pathname (relative to CWD):
// Results in "The file /.../foo:bar does not exits." (where "/..." is
// the CWD) on stderr and SystemShellExecuteException.
- aBuffer.append("open --");
+ aBuffer.append("open");
+ if (dir) {
+ aBuffer.append(" -R");
+ }
+ aBuffer.append(" --");
#else
// Just use xdg-open on non-Mac
aBuffer.append("/usr/bin/xdg-open");