mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
crypt32/tests: Prevent some crashes on Win9x (test_decode_msg).
This commit is contained in:
parent
6859eee630
commit
3c6fb6bb5e
1 changed files with 41 additions and 27 deletions
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue