diff --git a/windows/winproc.c b/windows/winproc.c index 225d42f4fab2b81ae2505831d9a306c8c2aed2d2..e82c350f359d478219c9171661d7b7807ec30971 100644 --- a/windows/winproc.c +++ b/windows/winproc.c @@ -577,6 +577,7 @@ INT WINPROC_MapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM *pwparam, LPARAM *plpara case LB_FINDSTRINGEXACT: case LB_SELECTSTRING: case EM_REPLACESEL: + if(!*plparam) return 0; *plparam = (LPARAM)HEAP_strdupAtoW( GetProcessHeap(), 0, (LPCSTR)*plparam ); return (*plparam ? 1 : -1); @@ -620,6 +621,7 @@ INT WINPROC_MapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM *pwparam, LPARAM *plpara /* Listbox */ case LB_ADDSTRING: case LB_INSERTSTRING: + if(!*plparam) return 0; if ( WINPROC_TestLBForStr( hwnd )) *plparam = (LPARAM)HEAP_strdupAtoW( GetProcessHeap(), 0, (LPCSTR)*plparam ); return (*plparam ? 1 : -1); @@ -637,6 +639,7 @@ INT WINPROC_MapMsg32ATo32W( HWND hwnd, UINT msg, WPARAM *pwparam, LPARAM *plpara /* Combobox */ case CB_ADDSTRING: case CB_INSERTSTRING: + if(!*plparam) return 0; if ( WINPROC_TestCBForStr( hwnd )) *plparam = (LPARAM)HEAP_strdupAtoW( GetProcessHeap(), 0, (LPCSTR)*plparam ); return (*plparam ? 1 : -1); @@ -825,6 +828,7 @@ INT WINPROC_MapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM *pwparam, LPARAM *plpara case LB_FINDSTRINGEXACT: case LB_SELECTSTRING: case EM_REPLACESEL: + if(!*plparam) return 0; *plparam = (LPARAM)HEAP_strdupWtoA( GetProcessHeap(), 0, (LPCWSTR)*plparam ); return (*plparam ? 1 : -1); @@ -863,6 +867,7 @@ INT WINPROC_MapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM *pwparam, LPARAM *plpara /* Listbox */ case LB_ADDSTRING: case LB_INSERTSTRING: + if(!*plparam) return 0; if ( WINPROC_TestLBForStr( hwnd )) *plparam = (LPARAM)HEAP_strdupWtoA( GetProcessHeap(), 0, (LPCWSTR)*plparam ); return (*plparam ? 1 : -1); @@ -880,6 +885,7 @@ INT WINPROC_MapMsg32WTo32A( HWND hwnd, UINT msg, WPARAM *pwparam, LPARAM *plpara /* Combobox */ case CB_ADDSTRING: case CB_INSERTSTRING: + if(!*plparam) return 0; if ( WINPROC_TestCBForStr( hwnd )) *plparam = (LPARAM)HEAP_strdupWtoA( GetProcessHeap(), 0, (LPCWSTR)*plparam ); return (*plparam ? 1 : -1); @@ -2354,10 +2360,15 @@ static LRESULT WINPROC_CallProc32ATo32W( WNDPROC func, HWND hwnd, LPARAM lParam ) { LRESULT result; + int unmap; - if (WINPROC_MapMsg32ATo32W( hwnd, msg, &wParam, &lParam ) == -1) return 0; + if( (unmap = WINPROC_MapMsg32ATo32W( hwnd, msg, &wParam, &lParam )) == -1) { + ERR_(msg)("Message translation failed. (msg=%s,wp=%08x,lp=%08lx)\n", + SPY_GetMsgName(msg), wParam, lParam ); + return 0; + } result = WINPROC_CallWndProc( func, hwnd, msg, wParam, lParam ); - WINPROC_UnmapMsg32ATo32W( hwnd, msg, wParam, lParam ); + if( unmap ) WINPROC_UnmapMsg32ATo32W( hwnd, msg, wParam, lParam ); return result; } @@ -2372,10 +2383,15 @@ static LRESULT WINPROC_CallProc32WTo32A( WNDPROC func, HWND hwnd, LPARAM lParam ) { LRESULT result; + int unmap; - if (WINPROC_MapMsg32WTo32A( hwnd, msg, &wParam, &lParam ) == -1) return 0; + if ((unmap = WINPROC_MapMsg32WTo32A( hwnd, msg, &wParam, &lParam )) == -1) { + ERR_(msg)("Message translation failed. (msg=%s,wp=%08x,lp=%08lx)\n", + SPY_GetMsgName(msg), wParam, lParam ); + return 0; + } result = WINPROC_CallWndProc( func, hwnd, msg, wParam, lParam ); - WINPROC_UnmapMsg32WTo32A( hwnd, msg, wParam, lParam ); + if( unmap ) WINPROC_UnmapMsg32WTo32A( hwnd, msg, wParam, lParam ); return result; }