From: Jacek Caban jacek@codeweavers.com
--- dlls/user32/winproc.c | 13 ++++++++++--- dlls/win32u/message.c | 22 ++++++++++++++++++++++ dlls/win32u/tests/win32u.c | 3 +++ 3 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 92392622fc8..ff8f502a0c1 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -877,7 +877,6 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case EM_GETLINE: case EM_SETTABSTOPS: case LB_SETTABSTOPS: - break; case CB_ADDSTRING: case CB_INSERTSTRING: case CB_FINDSTRING: @@ -888,8 +887,6 @@ BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lparam, case LB_FINDSTRING: case LB_FINDSTRINGEXACT: case LB_SELECTSTRING: - if (!*buffer) return TRUE; - if (!check_string( *buffer, size )) return FALSE; break; case CB_GETLBTEXT: { @@ -1082,6 +1079,16 @@ BOOL WINAPI User32CallWindowProc( struct win_proc_params *params, ULONG size ) case EM_GETLINE: case EM_SETTABSTOPS: case LB_SETTABSTOPS: + case CB_ADDSTRING: + case CB_INSERTSTRING: + case CB_FINDSTRING: + case CB_FINDSTRINGEXACT: + case CB_SELECTSTRING: + case LB_ADDSTRING: + case LB_INSERTSTRING: + case LB_FINDSTRING: + case LB_FINDSTRINGEXACT: + case LB_SELECTSTRING: { LRESULT *result_ptr = (LRESULT *)buffer - 1; *result_ptr = result; diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c index eb093fc2981..0c4b69c9a09 100644 --- a/dlls/win32u/message.c +++ b/dlls/win32u/message.c @@ -599,6 +599,18 @@ static BOOL unpack_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM *lpa if (!*wparam) return TRUE; minsize = *wparam * sizeof(UINT); break; + case CB_ADDSTRING: + case CB_INSERTSTRING: + case CB_FINDSTRING: + case CB_FINDSTRINGEXACT: + case CB_SELECTSTRING: + case LB_ADDSTRING: + case LB_INSERTSTRING: + case LB_FINDSTRING: + case LB_FINDSTRINGEXACT: + case LB_SELECTSTRING: + if (!*buffer) return TRUE; + break; case WM_WINE_SETWINDOWPOS: { WINDOWPOS wp; @@ -1356,6 +1368,16 @@ size_t user_message_size( UINT message, WPARAM wparam, LPARAM lparam, BOOL other case LB_DIR: case LB_ADDFILE: case EM_REPLACESEL: + case CB_ADDSTRING: + case CB_INSERTSTRING: + case CB_FINDSTRING: + case CB_FINDSTRINGEXACT: + case CB_SELECTSTRING: + case LB_ADDSTRING: + case LB_INSERTSTRING: + case LB_FINDSTRING: + case LB_FINDSTRINGEXACT: + case LB_SELECTSTRING: if (other_process && lparam) size = string_size( lparam_ptr, ansi ); break; case WM_GETMINMAXINFO: diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index baa419bba4f..cbda77f99ac 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -1907,6 +1907,9 @@ static void test_wndproc_hook(void) { "LB_ADDFILE", LB_ADDFILE, .lparam = strbufW, .lparam_init_size = sizeof(strbufW) }, { "EM_REPLACESEL", EM_REPLACESEL, .lparam = strbufW, .lparam_init_size = sizeof(strbufW) }, { "WM_WININICHANGE", WM_WININICHANGE, .lparam = strbufW, .lparam_init_size = sizeof(strbufW) }, + { "CB_ADDSTRING", CB_ADDSTRING }, + { "CB_INSERTSTRING", CB_INSERTSTRING }, + { "LB_ADDSTRING", LB_ADDSTRING }, /* messages not allowed to be sent by NtUserMessageCall */ { "WM_DRAWITEM", WM_DRAWITEM, .wparam = 10,