Jeff Latimer : user32: Check for NULL pData in DdeClientTransAction expecting to be passed a handle .
Alexandre Julliard
julliard at winehq.org
Wed Jan 14 09:03:46 CST 2009
Module: wine
Branch: master
Commit: 56784f60c16046f995b34ed67432525f0c6e18b5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=56784f60c16046f995b34ed67432525f0c6e18b5
Author: Jeff Latimer <lats at yless4u.com.au>
Date: Wed Jan 14 18:29:18 2009 +1100
user32: Check for NULL pData in DdeClientTransAction expecting to be passed a handle.
---
dlls/user32/dde_client.c | 18 ++++++++++++------
dlls/user32/tests/dde.c | 5 +----
2 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/dlls/user32/dde_client.c b/dlls/user32/dde_client.c
index d8a30c9..c052b83 100644
--- a/dlls/user32/dde_client.c
+++ b/dlls/user32/dde_client.c
@@ -632,6 +632,15 @@ static WDML_XACT* WDML_ClientQueueExecute(WDML_CONV* pConv, LPVOID pData, DWORD
TRACE("XTYP_EXECUTE transaction\n");
+ if (pData == NULL)
+ {
+ if (cbData == (DWORD)-1)
+ pConv->instance->lastError = DMLERR_INVALIDPARAMETER;
+ else
+ pConv->instance->lastError = DMLERR_MEMORY_ERROR;
+ return NULL;
+ }
+
pXAct = WDML_AllocTransaction(pConv->instance, WM_DDE_EXECUTE, 0, 0);
if (!pXAct)
return NULL;
@@ -1154,13 +1163,10 @@ HDDEDATA WINAPI DdeClientTransaction(LPBYTE pData, DWORD cbData, HCONV hConv, HS
switch (wType)
{
case XTYP_EXECUTE:
- /* Windows simply ignores hszItem and wFmt in this case */
- if (pData == NULL)
- {
- pConv->instance->lastError = DMLERR_INVALIDPARAMETER;
- return 0;
- }
+ /* Windows simply ignores hszItem and wFmt in this case */
pXAct = WDML_ClientQueueExecute(pConv, pData, cbData);
+ if (pXAct == NULL)
+ return 0;
break;
case XTYP_POKE:
if (!hszItem)
diff --git a/dlls/user32/tests/dde.c b/dlls/user32/tests/dde.c
index 0ece009..e1ccf66 100644
--- a/dlls/user32/tests/dde.c
+++ b/dlls/user32/tests/dde.c
@@ -427,10 +427,7 @@ todo_wine
ret = DdeGetLastError(client_pid);
ok(op == NULL, "Expected NULL, got %p\n", op);
ok(res == 0xdeadbeef, "Expected 0xdeadbeef, got %d\n", res);
- todo_wine
- {
- ok(ret == DMLERR_MEMORY_ERROR, "Expected DMLERR_MEMORY_ERROR, got %d\n", ret);
- }
+ ok(ret == DMLERR_MEMORY_ERROR, "Expected DMLERR_MEMORY_ERROR, got %d\n", ret);
/* XTYP_EXECUTE, no data, -1 size */
res = 0xdeadbeef;
More information about the wine-cvs
mailing list