From 01578f51bae7d75a1360a5d3a413d4079e3ae887 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 30 Mar 2010 20:42:09 +0200 Subject: [PATCH] user32: Pack the structure for WM_DDE_ACK to allow crossing 32/64 boundaries. --- dlls/user32/message.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/user32/message.c b/dlls/user32/message.c index a2401e4b91..b93c703979 100644 --- a/dlls/user32/message.c +++ b/dlls/user32/message.c @@ -2000,8 +2000,9 @@ static BOOL post_dde_message( struct packed_message *data, const struct send_mes HGLOBAL h = dde_get_pair( (HANDLE)uiHi ); if (h) { + ULONGLONG hpack = pack_ptr( h ); /* send back the value of h on the other side */ - push_data( data, &h, sizeof(HGLOBAL) ); + push_data( data, &hpack, sizeof(hpack) ); lp = uiLo; TRACE( "send dde-ack %lx %08lx => %p\n", uiLo, uiHi, h ); } @@ -2102,11 +2103,13 @@ static BOOL unpack_dde_message( HWND hwnd, UINT message, WPARAM *wparam, LPARAM case WM_DDE_ACK: if (size) { + ULONGLONG hpack; /* hMem is being passed */ - if (size != sizeof(HGLOBAL)) return FALSE; + if (size != sizeof(hpack)) return FALSE; if (!buffer || !*buffer) return FALSE; uiLo = *lparam; - memcpy( &hMem, *buffer, size ); + memcpy( &hpack, *buffer, size ); + hMem = unpack_ptr( hpack ); uiHi = (UINT_PTR)hMem; TRACE("recv dde-ack %lx mem=%lx[%lx]\n", uiLo, uiHi, GlobalSize( hMem )); } -- 2.32.0.93.g670b81a890