 
            From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/user32/tests/dde.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/dlls/user32/tests/dde.c b/dlls/user32/tests/dde.c index cd97bef165d..d54451f3758 100644 --- a/dlls/user32/tests/dde.c +++ b/dlls/user32/tests/dde.c @@ -2167,6 +2167,17 @@ static void test_PackDDElParam(void) ret = FreeDDElParam(WM_DDE_ACK, lparam); ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ lparam = PackDDElParam(WM_DDE_ACK, 0, 0); + ptr = GlobalLock((HGLOBAL)lparam); + ok(ptr != NULL, "Expected non-NULL ptr\n"); + ok(ptr[0] == 0, "Expected 0, got %08Ix\n", ptr[0]); + ok(ptr[1] == 0, "Expected 0, got %08Ix\n", ptr[1]); + ret = GlobalUnlock((HGLOBAL)lparam); + ok(ret == 1, "Expected 1, got %d\n", ret); + + ret = FreeDDElParam(WM_DDE_ACK, lparam); + ok(ret == TRUE, "Expected TRUE, got %d\n", ret); + lparam = PackDDElParam(WM_DDE_DATA, 0xcafe, 0xbeef); ptr = GlobalLock((HGLOBAL)lparam); ok(ptr != NULL, "Expected non-NULL ptr\n"); @@ -2310,6 +2321,20 @@ static void test_UnpackDDElParam(void) ok(lo == 0xcafebabe, "Expected 0xcafebabe, got %08Ix\n", lo); ok(hi == 0xdeadbeef, "Expected 0xdeadbeef, got %08Ix\n", hi);
+ lo = 0xdead; + hi = 0xbeef; + ret = UnpackDDElParam(WM_DDE_ACK, 0, &lo, &hi); + ok(ret == FALSE, "Expected TRUE, got %d\n", ret); + ok(lo == 0, "Expected 0xcafebabe, got %08Ix\n", lo); + ok(hi == 0, "Expected 0xdeadbeef, got %08Ix\n", hi); + + lo = 0xdead; + hi = 0xbeef; + ret = UnpackDDElParam(WM_DDE_ACK, MAKELPARAM(server, topic), &lo, &hi); + ok(ret == FALSE, "Expected TRUE, got %d\n", ret); + ok(lo == 0, "Expected 0xcafebabe, got %08Ix\n", lo); + ok(hi == 0, "Expected 0xdeadbeef, got %08Ix\n", hi); + lo = 0xdead; hi = 0xbeef; ret = UnpackDDElParam(WM_DDE_DATA, (LPARAM)hglobal, &lo, &hi);
 
            From: Dmitry Timoshkov dmitry@baikal.ru
Use same buffer size as dlls/user32/dde_misc.c does.
Wine-Bug: http://bugs.winehq.org/show_bug.cgi?id=10349 Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/user.exe16/message.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/dlls/user.exe16/message.c b/dlls/user.exe16/message.c index 9d3472d5ce2..a7126049c05 100644 --- a/dlls/user.exe16/message.c +++ b/dlls/user.exe16/message.c @@ -34,6 +34,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(msg); WINE_DECLARE_DEBUG_CHANNEL(message);
+#define MAX_ATOM_LEN 255 + DWORD USER16_AlertableWait = 0;
struct wow_handlers32 wow_handlers32; @@ -881,9 +883,9 @@ LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT1 UINT_PTR lo = LOWORD(lParam); UINT_PTR hi = HIWORD(lParam); int flag = 0; - char buf[2]; + char buf[MAX_ATOM_LEN + 1];
- if (GlobalGetAtomNameA(hi, buf, 2) > 0) flag |= 1; + if (GlobalGetAtomNameA(hi, buf, sizeof(buf)) > 0) flag |= 1; if (GlobalSize16(hi) != 0) flag |= 2; switch (flag) { @@ -1262,7 +1264,7 @@ LRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT { UINT_PTR lo, hi; int flag = 0; - char buf[2]; + char buf[MAX_ATOM_LEN + 1];
UnpackDDElParam( msg, lParam, &lo, &hi );
 
            From: Dmitry Timoshkov dmitry@baikal.ru
Wine-Bug: http://bugs.winehq.org/show_bug.cgi?id=10349 Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/user.exe16/message.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/user.exe16/message.c b/dlls/user.exe16/message.c index a7126049c05..49aba6605a3 100644 --- a/dlls/user.exe16/message.c +++ b/dlls/user.exe16/message.c @@ -1266,7 +1266,12 @@ LRESULT WINPROC_CallProc32ATo16( winproc_callback16_t callback, HWND hwnd, UINT int flag = 0; char buf[MAX_ATOM_LEN + 1];
- UnpackDDElParam( msg, lParam, &lo, &hi ); + if (!UnpackDDElParam( msg, lParam, &lo, &hi )) + { + /* Probably this is a response to WM_DDE_INITIATE */ + lo = LOWORD( lParam ); + hi = HIWORD( lParam ); + }
if (GlobalGetAtomNameA((ATOM)hi, buf, sizeof(buf)) > 0) flag |= 1; if (GlobalSize((HANDLE)hi) != 0) flag |= 2;

