Paul Vriens : crypt32/tests: Prevent some crashes on Win9x (test_decode_msg ).
Alexandre Julliard
julliard at winehq.org
Mon Feb 23 10:00:44 CST 2009
Module: wine
Branch: master
Commit: 3c6fb6bb5ea2226444223bea369e28fc010859bc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3c6fb6bb5ea2226444223bea369e28fc010859bc
Author: Paul Vriens <Paul.Vriens.Wine at gmail.com>
Date: Mon Feb 23 11:46:28 2009 +0100
crypt32/tests: Prevent some crashes on Win9x (test_decode_msg).
---
dlls/crypt32/tests/msg.c | 68 +++++++++++++++++++++++++++------------------
1 files changed, 41 insertions(+), 27 deletions(-)
diff --git a/dlls/crypt32/tests/msg.c b/dlls/crypt32/tests/msg.c
index 2188e6d..8913db4 100644
--- a/dlls/crypt32/tests/msg.c
+++ b/dlls/crypt32/tests/msg.c
@@ -2022,29 +2022,33 @@ static void test_decode_msg_update(void)
ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
CryptMsgClose(msg);
- msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
- /* Updating a message that has a NULL stream callback fails */
- SetLastError(0xdeadbeef);
- ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
- FALSE);
- todo_wine
- ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
- GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
- "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
- GetLastError());
- /* Changing the callback pointer after the fact yields the same error (so
- * the message must copy the stream info, not just store a pointer to it)
- */
- streamInfo.pfnStreamOutput = nop_stream_output;
- SetLastError(0xdeadbeef);
- ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
- FALSE);
- todo_wine
- ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
- GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
- "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
- GetLastError());
- CryptMsgClose(msg);
+ if (have_nt)
+ {
+ msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
+ /* Updating a message that has a NULL stream callback fails */
+ SetLastError(0xdeadbeef);
+ /* Crashes on some Win9x */
+ ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
+ FALSE);
+ todo_wine
+ ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
+ GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
+ "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
+ GetLastError());
+ /* Changing the callback pointer after the fact yields the same error (so
+ * the message must copy the stream info, not just store a pointer to it)
+ */
+ streamInfo.pfnStreamOutput = nop_stream_output;
+ SetLastError(0xdeadbeef);
+ ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
+ FALSE);
+ todo_wine
+ ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
+ GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
+ "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
+ GetLastError());
+ CryptMsgClose(msg);
+ }
/* Empty non-final updates are allowed when streaming.. */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
@@ -2353,10 +2357,14 @@ static void test_decode_msg_get_param(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, hashEmptyContent, sizeof(hashEmptyContent), TRUE);
- check_param("empty hash content", msg, CMSG_CONTENT_PARAM, NULL, 0);
- check_param("empty hash hash data", msg, CMSG_HASH_DATA_PARAM, NULL, 0);
- check_param("empty hash computed hash", msg, CMSG_COMPUTED_HASH_PARAM,
- emptyHashParam, sizeof(emptyHashParam));
+ if (ret)
+ {
+ /* Crashes on some Win9x */
+ check_param("empty hash content", msg, CMSG_CONTENT_PARAM, NULL, 0);
+ check_param("empty hash hash data", msg, CMSG_HASH_DATA_PARAM, NULL, 0);
+ check_param("empty hash computed hash", msg, CMSG_COMPUTED_HASH_PARAM,
+ emptyHashParam, sizeof(emptyHashParam));
+ }
CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, hashContent, sizeof(hashContent), TRUE);
@@ -2477,6 +2485,12 @@ static void test_decode_msg_get_param(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, signedKeyIdEmptyContent,
sizeof(signedKeyIdEmptyContent), TRUE);
+ if (!ret && GetLastError() == OSS_DATA_ERROR)
+ {
+ /* Subsequent tests crashes on some Win9x, so bail out */
+ CryptMsgClose(msg);
+ return;
+ }
ok(ret, "CryptMsgUpdate failed: %08x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_SIGNER_COUNT_PARAM, 0, &value, &size);
More information about the wine-cvs
mailing list