Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57610
This is a simple workaround to fix the regression. The issue seems to be residing in inconsistent values returned by XRandR, and arguably a host driver bug, but it probably could be better fixed by enumerating the XRandR tree only on startup and when it is updated, but this would be a much larger change.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7126
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57610
This attempt to fix a regression which is caused by XRandR enumerated output/crtc changing during the display device initial enumeration.
The user setup uses an external display and somehow XRandR enumerates the first (non-primary) monitor and its mode without being able to find a primary output/crtc (and uses that first monitor position as primary as fallback). Then, when the second (primary) monitor and its modes are enumerated it actually finds it and uses its as it should. This results in both monitor modes being positioned at 0x0, which breaks various things later on.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7110
Function gets called with Magic == 0xdead, which causes the test to
use the 64-bit path, which results in this buffer overflow.
Signed-off-by: Nikolay Sivov <nsivov(a)codeweavers.com>
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7134
Jinoh Kang (@iamahuman) commented about server/thread.c:
> + {
> + struct wait_completion_packet *packet;
> +
> + LIST_FOR_EACH_ENTRY( packet, &obj->wait_completion_packet_queue, struct wait_completion_packet, entry )
> + {
> + list_remove( &packet->entry );
> + release_object( packet->target );
> + packet->in_object_packet_queue = 0;
> + packet->target = NULL;
> +
> + add_completion( packet->completion, packet->ckey, packet->cvalue, packet->status,
> + packet->information, packet );
> + packet->in_completion_queue = 1;
> + }
> + }
> +
General advice: you should try not to leak implementation details of certain object (wait completion packet) into other types of objects.
For example, if this piece of code is still to be preserved, you should move this into a helper completion.c, declare as extern in object.h (or file.h), and call that.
That way, you don't have to define the entire `struct wait_completion_packet` in a shared header file. If this were factored into a helper, a simple forward declaration would have sufficed in the `file.h` side.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/6911#note_91785