MobaXTerm tries to ShellExecute "/bin/sh" when running under wine. This ability
to run unix executables on the host via unix paths was accidentally removed
in the attemp to align ShellExecute more closely with native, while fixing the
problem that sometimes wrong executable is started by ShellExecute (e.g. in
Motor Race Collection).
Related: a2548c8db3096963012939c82e340f6b867f3efd
Fixes: 85d029e3b01f6dd35a86cc07796af982d66e4a03
--
v4: shell32: Restore the ability of running unix executables via unix paths
https://gitlab.winehq.org/wine/wine/-/merge_requests/8794
This addresses
dlls/ntdll/unix/signal_x86_64.c: In function ‘check_invalid_gsbase’:
dlls/ntdll/unix/signal_x86_64.c:2067:23: error: passing argument 1 of ‘amd64_get_gsbase’ from incompatible pointer type [-Wincompatible-pointer-types]
2067 | amd64_get_gsbase( &cur_gsbase );
| ^~~~~~~~~~~
| |
| ULONG_PTR * {aka long unsigned int *}
which shows with modern compilers.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8919
Partial, as per documentation, implement fixing as the default
locale.
Signed-off-by: Edward O'Callaghan <edward(a)antitrust.cc>
--
v3: oleaut32: Implement (S|G)etVarConversionLocaleSetting()
https://gitlab.winehq.org/wine/wine/-/merge_requests/7447
Nikolay Sivov (@nsivov) commented about dlls/combase/combase.c:
> if (open_classes_key(HKEY_CLASSES_ROOT, buf, MAXIMUM_ALLOWED, &xhkey))
> {
> - free(buf);
> - WARN("couldn't open key for ProgID %s\n", debugstr_w(progid));
> - return CO_E_CLASSSTRING;
> + lstrcpyW(buf, progid);
> + lstrcatW(buf, L"\\CurVer");
> + if (RegQueryValueW(HKEY_CLASSES_ROOT, buf, buf3, &buf3len))
> + {
> + free(buf);
> + WARN("couldn't query CurVer value for ProgID %s\n", debugstr_w(progid));
> + return CO_E_CLASSSTRING;
> + }
> +
> + lstrcpyW(buf, buf3);
> + lstrcatW(buf, L"\\CLSID");
Size of 'buf' has no relation to size of 'buf3', so you can't assume you can copy things and not overrun it.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7539#note_115152
Nikolay Sivov (@nsivov) commented about dlls/combase/combase.c:
>
> static HRESULT clsid_from_string_reg(LPCOLESTR progid, CLSID *clsid)
> {
> - WCHAR buf2[CHARS_IN_GUID];
> + WCHAR buf2[CHARS_IN_GUID],buf3[CHARS_IN_GUID];
> LONG buf2len = sizeof(buf2);
> + LONG buf3len = sizeof(buf3);
Those should be renamed to something more intuitive. Also buf3 here does not contain a stringified GUID but ProgID, so using CHARS_IN_GUID length is incorrect.
What happens if ProgID referenced with CurVer itself contains another CurVer, is it followed?
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7539#note_115151
Nikolay Sivov (@nsivov) commented about dlls/ole32/tests/compobj.c:
> ok(IsEqualCLSID(&clsid, &CLSID_StdFont), "clsid wasn't equal to CLSID_StdFont\n");
>
> /* test some failure cases */
This comment does not belong to this new test.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7539#note_115150