Kaydet (Commit) c650217c authored tarafından Mike Kaganski's avatar Mike Kaganski

tdf#124776: don't use SearchPathW to get full path of executable

... use GetModuleFileNameW() for that.

We call SetDllDirectoryW and SetSearchPathMode to improve security of
the process, and exclude some paths (including current directory) from
search when using API that looks for binaries whose names are not fully
qualified.

So the sequence is this:
1. Program is started using relative executable path like
   "instdir\program\soffice";
2. sal_detail_initialize is called, which calls the two mentioned
   hardening functions;
3. sal_detail_initialize calls osl_setCommandArgs, which in turn calls
   osl_createCommandArgs_Impl;
4. The latter uses SearchPathW with empty path and first program arg
   "instdir\program\soffice" to find fully qualified program path.

That now naturally fails, because current path is not searched.

But to find the process name, we need no search: we can simply use
GetModuleFileNameW() with NULL passed as module handle. Let's use that.

Note that we can't use _wpgmptr/_get_wpgmptr, because we don't use wide
entry point like wmain.

Change-Id: I7a0013a0505f7bdd38164b09b045bfade9686664
Reviewed-on: https://gerrit.libreoffice.org/70844Reviewed-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
Tested-by: 's avatarMike Kaganski <mike.kaganski@collabora.com>
üst f91603a9
......@@ -335,10 +335,8 @@ static rtl_uString ** osl_createCommandArgs_Impl (int argc, char **)
{
/* Ensure absolute path */
::osl::LongPathBuffer< sal_Unicode > aBuffer( MAX_LONG_PATH );
DWORD dwResult = 0;
dwResult = SearchPathW (
nullptr, o3tl::toW(ppArgs[0]->buffer), L".exe", aBuffer.getBufSizeInSymbols(), o3tl::toW(aBuffer), nullptr);
DWORD dwResult
= GetModuleFileNameW(nullptr, o3tl::toW(aBuffer), aBuffer.getBufSizeInSymbols());
if ((0 < dwResult) && (dwResult < aBuffer.getBufSizeInSymbols()))
{
/* Replace argv[0] with its absolute path */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment