user32/tests: Skip some tests when DdeClientTransaction() returns NULL. This avoids some crashes on Win9x.
Francois Gouget
fgouget at free.fr
Fri Nov 9 05:42:32 CST 2007
---
This causes nasty crashes on Win98: white modal Win98 dialog saying the
application performed an illegal operation, then the standard dialog,
but the debugger is never triggered. I suspect this is because the crash
happens in the Win98 code. I also suspect this is what prevents winetest
from completing (since 20071103) in my nightly tests, though I've been
able to nurse it to completion on the 6th.
Even with this patch there's still a crash but I have not managed to
identify where :-(
dlls/user32/tests/dde.c | 71 +++++++++++++++++++++++++++--------------------
1 files changed, 41 insertions(+), 30 deletions(-)
diff --git a/dlls/user32/tests/dde.c b/dlls/user32/tests/dde.c
index ca9fe20..0c5dc1f 100644
--- a/dlls/user32/tests/dde.c
+++ b/dlls/user32/tests/dde.c
@@ -285,57 +285,66 @@ static void test_ddeml_client(void)
DdeGetLastError(client_pid);
hdata = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REQUEST, default_timeout, &res);
ret = DdeGetLastError(client_pid);
- ok(hdata != NULL, "Expected non-NULL hdata, got %p\n", hdata);
ok(ret == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", ret);
todo_wine
{
ok(res == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %08x\n", res);
}
-
- str = (LPSTR)DdeAccessData(hdata, &size);
- ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str);
- ok(size == 19, "Expected 19, got %d\n", size);
-
- ret = DdeUnaccessData(hdata);
- ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ if (hdata == NULL)
+ ok(FALSE, "hdata is NULL\n");
+ else
+ {
+ str = (LPSTR)DdeAccessData(hdata, &size);
+ ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str);
+ ok(size == 19, "Expected 19, got %d\n", size);
+
+ ret = DdeUnaccessData(hdata);
+ ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ }
/* XTYP_REQUEST, fAckReq = TRUE */
res = 0xdeadbeef;
DdeGetLastError(client_pid);
hdata = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REQUEST, default_timeout, &res);
ret = DdeGetLastError(client_pid);
- ok(hdata != NULL, "Expected non-NULL hdata\n");
todo_wine
{
ok(res == DDE_FNOTPROCESSED, "Expected DDE_FNOTPROCESSED, got %d\n", res);
ok(ret == DMLERR_MEMORY_ERROR, "Expected DMLERR_MEMORY_ERROR, got %d\n", ret);
}
+ if (hdata == NULL)
+ ok(FALSE, "hdata is NULL\n");
+ else
+ {
+ str = (LPSTR)DdeAccessData(hdata, &size);
+ ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str);
+ ok(size == 19, "Expected 19, got %d\n", size);
- str = (LPSTR)DdeAccessData(hdata, &size);
- ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str);
- ok(size == 19, "Expected 19, got %d\n", size);
-
- ret = DdeUnaccessData(hdata);
- ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ ret = DdeUnaccessData(hdata);
+ ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ }
/* XTYP_REQUEST, all params normal */
res = 0xdeadbeef;
DdeGetLastError(client_pid);
hdata = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REQUEST, default_timeout, &res);
ret = DdeGetLastError(client_pid);
- ok(hdata != NULL, "Expected non-NULL hdata\n");
ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret);
todo_wine
{
ok(res == DDE_FNOTPROCESSED, "Expected DDE_FNOTPROCESSED, got %d\n", res);
}
+ if (hdata == NULL)
+ ok(FALSE, "hdata is NULL\n");
+ else
+ {
+ str = (LPSTR)DdeAccessData(hdata, &size);
+ ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str);
+ ok(size == 19, "Expected 19, got %d\n", size);
- str = (LPSTR)DdeAccessData(hdata, &size);
- ok(!lstrcmpA(str, "requested data\r\n"), "Expected 'requested data\\r\\n', got %s\n", str);
- ok(size == 19, "Expected 19, got %d\n", size);
-
- ret = DdeUnaccessData(hdata);
- ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ ret = DdeUnaccessData(hdata);
+ ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ }
/* XTYP_REQUEST, no item */
res = 0xdeadbeef;
@@ -444,22 +453,24 @@ static void test_ddeml_client(void)
DdeGetLastError(client_pid);
hdata = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_REQUEST, default_timeout, &res);
ret = DdeGetLastError(client_pid);
- ok(hdata != NULL, "Expected non-NULL hdata\n");
ok(ret == DMLERR_NO_ERROR, "Expected DMLERR_NO_ERROR, got %d\n", ret);
todo_wine
{
ok(res == DDE_FNOTPROCESSED, "Expected DDE_FNOTPROCESSED, got %d\n", res);
}
+ if (hdata == NULL)
+ ok(FALSE, "hdata is NULL\n");
+ else
+ {
+ str = (LPSTR)DdeAccessData(hdata, &size);
+ ok(!lstrcmpA(str, "command executed\r\n"), "Expected 'command executed\\r\\n', got %s\n", str);
+ ok(size == 21, "Expected 21, got %d\n", size);
- str = (LPSTR)DdeAccessData(hdata, &size);
- ok(!lstrcmpA(str, "command executed\r\n"), "Expected 'command executed\\r\\n', got %s\n", str);
- ok(size == 21, "Expected 21, got %d\n", size);
-
- ret = DdeUnaccessData(hdata);
- ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ ret = DdeUnaccessData(hdata);
+ ok(ret == TRUE, "Expected TRUE, got %d\n", ret);
+ }
/* invalid transactions */
-
res = 0xdeadbeef;
DdeGetLastError(client_pid);
op = DdeClientTransaction(NULL, 0, conversation, item, CF_TEXT, XTYP_ADVREQ, default_timeout, &res);
--
1.5.3.4
More information about the wine-patches
mailing list