summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/Library_syssh.mk4
-rw-r--r--shell/source/win32/SysShExec.cxx9
2 files changed, 13 insertions, 0 deletions
diff --git a/shell/Library_syssh.mk b/shell/Library_syssh.mk
index 72ff73842dc3..27657c4456aa 100644
--- a/shell/Library_syssh.mk
+++ b/shell/Library_syssh.mk
@@ -25,6 +25,10 @@ $(eval $(call gb_Library_use_system_win32_libs,syssh,\
shell32 \
))
+$(eval $(call gb_Library_use_libraries,syssh,\
+ tl \
+))
+
$(eval $(call gb_Library_set_componentfile,syssh,shell/source/win32/syssh,services))
$(eval $(call gb_Library_add_exception_objects,syssh,\
diff --git a/shell/source/win32/SysShExec.cxx b/shell/source/win32/SysShExec.cxx
index 7be77d6344de..c485cb8c37e2 100644
--- a/shell/source/win32/SysShExec.cxx
+++ b/shell/source/win32/SysShExec.cxx
@@ -38,6 +38,7 @@
#include <o3tl/runtimetooustring.hxx>
#include <o3tl/safeCoInitUninit.hxx>
#include <o3tl/string_view.hxx>
+#include <tools/urlobj.hxx>
#include <prewin.h>
#include <Shlobj.h>
@@ -360,6 +361,14 @@ void SAL_CALL CSysShExec::execute( const OUString& aCommand, const OUString& aPa
}
}
}
+ } else {
+ // Filter out input that technically is a non-file URI, but could be interpreted by
+ // ShellExecuteExW as a file system pathname.
+ if (INetURLObject(aCommand, INetProtocol::File).GetProtocol() == INetProtocol::File) {
+ throw css::lang::IllegalArgumentException(
+ "XSystemShellExecute.execute URIS_ONLY with non-URI pathname " + aCommand,
+ static_cast< cppu::OWeakObject * >(this), 0);
+ }
}
}