Previously long URI/URLs (> 1024 characters) would cause a stack corruption and crash Wine. After this MR, Wine will no longer crash but the URL is not opened either primarily due to `SHELL_Argify` limitations.
--
v3: shell32: Increase timeout for long URLs
https://gitlab.winehq.org/wine/wine/-/merge_requests/2383
Using a dedicated exit jmpbuf and removing the need for assembly
routines.
When Wine handles an exception in unix code, we return to user mode by
jumping to the last syscall frame. This can leave some pthread cancel
cleanups registered, in the pthread internal linked list, and at the
same time later overwrite the stack frame they were registered for.
In the same way, jumping to the exit frame on thread exit or abort, can
also leave some cleanup handlers registered for invalid stack frames.
Depending on the implementation, calling pthread_exit will cause all the
registered pthread cleanup handlers to be called, possibly jumping back
to now overwritten stack frames and causing segmentation faults.
Exiting a pthread normally, by returning from its procedure, or calling
exit(0) for the main thread doesn't run pthread_exit and doesn't call
cleanup handlers, avoiding that situation.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52213
### Additional note:
For robustness, we should probably try to execute these cleanup handlers
when unwinding the stack frames, as we would otherwise leave pthread
objects in a potential problematic state (like a mutex locked, etc).
It is however hard to do so when the handlers are registered from some C
code: pthread C implementation is done by calling some internal pthread
functions to register the handlers, and they aren't registered as
standard unwind handlers.
Only pthread_cancel and pthread_exit can unwind and call / unregister
the C handlers, but interrupting that procedure, for instance calling
setjmp / longjmp from withing our own handler isn't supported.
From C++ code, pthread cleanup handlers are registered through C++ class
constructors / destructors, and it would then be possible to partially
unwind and call them at the same time.
--
v10: ntdll: Remove now unnecessary arch-specific exit frame.
ntdll: Avoid calling pthread_exit from abort_thread.
ntdll: Avoid calling abort_thread from the signal stack.
ntdll: Use is_inside_syscall more consistently.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1088
--
v3: cryptui: Use CertNameToStr(CERT_NAME_STR_NO_QUOTING_FLAG) to disable quoting.
crypt32: Add support for CERT_NAME_STR_NO_QUOTING_FLAG to CertNameToStr().
crypt32/tests: Add some tests for quoted RDN values.
crypt32: Avoid truncating unicode chars.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3729
Rainbow 6 Siege and some other games require this. Type is printed in the FIXME to determine which type the application requires.
--
v2: gdi32: Add stub for D3DKMTQueryAdapterInfo.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3777
I marked this a draft because it may be a somewhat orthogonal step, but IRRC @giomasce suggested it.
While a deref's data type can be computed from the variable's data type
as long as the deref is still represented as a path (as we did with
hlsl_deref_get_type()), we need the deref.data_type field for when the
deref is represented as an offset.
While we could get rid of this deref.data_type in the future, if we manage to transform
the HLSL IR instructions directly to VSIR withot requiring lowering the
derefs to their offset representation, this would take a while.
So, this patch makes the deref.data_type field available during the
whole lifetime of the deref. Which makes deref.data_type easier to
understand (since it can be used anytime now) and we no longer have
to call hlsl_deref_get_type().
--
https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/343
In clock_change_state() when a clock is running, a timer is removed from clock->timers. The same
timer is then used to create an async result, which will eventually calls present_clock_timer_callback_Invoke()
and removes the same timer.
--
v2: mf: Avoid a double free of presentation clock timers.
https://gitlab.winehq.org/wine/wine/-/merge_requests/3955
Fixes Starfield not being able to take photos in photo mode (due to failing to creating windowscodecs' image factory due to COM apartment being initialized). Turns out on Windows RoGetActivationFactory() initializes implicit MTA apartment when called from STA thread, and so after that called once COM is implicitly uninitialized for any (new) thread until COM is uninitialized in the thread which called RoGetActivationFactory (or that thread exited). This is not the case on Win8 (where the function was first introduced) but looks consistent after that.
--
v4: combase: Ensure MTA existence in RoGetActivationFactory().
combase/tests: Add tests for implicit MTA with RoGetActivationFactory().
https://gitlab.winehq.org/wine/wine/-/merge_requests/3806