crypt32/tests: Prevent some crashes on Win9x (test_decode_msg).

This commit is contained in:
Paul Vriens 2009-02-23 11:46:28 +01:00 committed by Alexandre Julliard
parent 6859eee630
commit 3c6fb6bb5e

View file

@ -2022,29 +2022,33 @@ static void test_decode_msg_update(void)
ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError()); ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
CryptMsgClose(msg); CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo); if (have_nt)
/* Updating a message that has a NULL stream callback fails */ {
SetLastError(0xdeadbeef); msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo);
ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent), /* Updating a message that has a NULL stream callback fails */
FALSE); SetLastError(0xdeadbeef);
todo_wine /* Crashes on some Win9x */
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION || ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */), FALSE);
"Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n", todo_wine
GetLastError()); ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
/* Changing the callback pointer after the fact yields the same error (so GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */),
* the message must copy the stream info, not just store a pointer to it) "Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n",
*/ GetLastError());
streamInfo.pfnStreamOutput = nop_stream_output; /* Changing the callback pointer after the fact yields the same error (so
SetLastError(0xdeadbeef); * the message must copy the stream info, not just store a pointer to it)
ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent), */
FALSE); streamInfo.pfnStreamOutput = nop_stream_output;
todo_wine SetLastError(0xdeadbeef);
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION || ret = CryptMsgUpdate(msg, dataEmptyContent, sizeof(dataEmptyContent),
GetLastError() == STATUS_ILLEGAL_INSTRUCTION /* WinME */), FALSE);
"Expected STATUS_ACCESS_VIOLATION or STATUS_ILLEGAL_INSTRUCTION, got %x\n", todo_wine
GetLastError()); ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
CryptMsgClose(msg); 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.. */ /* Empty non-final updates are allowed when streaming.. */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, &streamInfo); 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); msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, hashEmptyContent, sizeof(hashEmptyContent), TRUE); ret = CryptMsgUpdate(msg, hashEmptyContent, sizeof(hashEmptyContent), TRUE);
check_param("empty hash content", msg, CMSG_CONTENT_PARAM, NULL, 0); if (ret)
check_param("empty hash hash data", msg, CMSG_HASH_DATA_PARAM, NULL, 0); {
check_param("empty hash computed hash", msg, CMSG_COMPUTED_HASH_PARAM, /* Crashes on some Win9x */
emptyHashParam, sizeof(emptyHashParam)); 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); CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL); msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, hashContent, sizeof(hashContent), TRUE); 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); msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
ret = CryptMsgUpdate(msg, signedKeyIdEmptyContent, ret = CryptMsgUpdate(msg, signedKeyIdEmptyContent,
sizeof(signedKeyIdEmptyContent), TRUE); 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()); ok(ret, "CryptMsgUpdate failed: %08x\n", GetLastError());
size = sizeof(value); size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_SIGNER_COUNT_PARAM, 0, &value, &size); ret = CryptMsgGetParam(msg, CMSG_SIGNER_COUNT_PARAM, 0, &value, &size);