* * *
While investigating another problem, I found we are handling empty attributes list differently compared native.
But the actual problem is this, shouldn't `CRYPT_SizeOfAttributes` add `sizeof(CRYPT_ATTRIBUTES)` to `size`? Basically we return `size == 0` when the attributes list is empty, so the caller allocates zero bytes and call `GetParam` again, and we write out-of-bound trying to `out->cAttrs = in->cAttrs` in `CRYPT_ConstructAttributes`. (Of course with this MR this problem no longer show up, but the question still stands.)
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8350
CW* masks in window_set_config() are from comparing against the old rect from data->pending_state.rect,
not the actual X11 window rectangle. So it's still possible that after removing __NET_WM_STATE_FULLSCREEN,
WM moves the window behind Wine's back. Then window_set_config() calculates CW* masks and calls
XReconfigureWMWindow(), assuming the old rect is still the actual X11 window rect. As the result,
some rectangle updates might be missed.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/8128