Alexandre Julliard pushed to branch master at wine / wine
Commits: 05564eb2 by Zhiyi Zhang at 2025-01-27T14:40:39+01:00 win32u: Allocate a separate user buffer when packing a large WM_COPYDATA message for user32.
Before this patch, WM_COPYDATA message data was packed at the end of the message and then passed to KeUserModeCallback() to call user mode callbacks. However, WM_COPYDATA can contain a large amount of data so KeUserModeCallback() can cause stack overflows. Manual tests on Windows show that WM_COPYDATA messages with data <= 2048 bytes do have their data packed at the end of the message. But for WM_COPYDATA messages with data > 2048 bytes, KiUserCallbackDispatcher() gets a 120 bytes packed arguments, which is the same size when packing WM_COPYDATA messages with no data. So for WM_COPYDATA messages with data > 2048 bytes, the data must be packed differently.
Fix FCSExpress hangs after sending WM_COPYDATA messages.
- - - - - c346a814 by Zhiyi Zhang at 2025-01-27T14:40:39+01:00 user32/tests: Add tests for WM_COPYDATA.
- - - - -
5 changed files:
- dlls/user32/tests/msg.c - dlls/user32/winproc.c - dlls/win32u/hook.c - dlls/win32u/message.c - dlls/win32u/win32u_private.h
View it on GitLab: https://gitlab.winehq.org/wine/wine/-/compare/790cde06590c68a1684477e1df7b6e...