crypt32: Test CryptMsgUpdate for data messages opened to encode.
This commit is contained in:
parent
a581855d26
commit
bd05e2abe3
|
@ -300,9 +300,71 @@ static void test_data_msg_open(void)
|
||||||
CryptMsgClose(msg);
|
CryptMsgClose(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const BYTE msgData[] = { 1, 2, 3, 4 };
|
||||||
|
|
||||||
|
static void test_data_msg_update(void)
|
||||||
|
{
|
||||||
|
HCRYPTMSG msg;
|
||||||
|
BOOL ret;
|
||||||
|
|
||||||
|
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL,
|
||||||
|
NULL);
|
||||||
|
/* Can't update a message that wasn't opened detached with final = FALSE */
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptMsgUpdate(msg, NULL, 0, FALSE);
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_MSG_ERROR,
|
||||||
|
"Expected CRYPT_E_MSG_ERROR, got %x\n", GetLastError());
|
||||||
|
/* Updating it with final = TRUE succeeds */
|
||||||
|
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
|
||||||
|
ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
|
||||||
|
/* Any subsequent update will fail, as the last was final */
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_MSG_ERROR,
|
||||||
|
"Expected CRYPT_E_MSG_ERROR, got %x\n", GetLastError());
|
||||||
|
CryptMsgClose(msg);
|
||||||
|
|
||||||
|
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL,
|
||||||
|
NULL);
|
||||||
|
/* Can't update a message with no data */
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptMsgUpdate(msg, NULL, 0, TRUE);
|
||||||
|
todo_wine {
|
||||||
|
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||||
|
"Expected E_INVALIDARG, got %x\n", GetLastError());
|
||||||
|
/* Curiously, a valid update will now fail as well, presumably because of
|
||||||
|
* the last (invalid, but final) update.
|
||||||
|
*/
|
||||||
|
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
|
||||||
|
ok(!ret && GetLastError() == CRYPT_E_MSG_ERROR,
|
||||||
|
"Expected CRYPT_E_MSG_ERROR, got %x\n", GetLastError());
|
||||||
|
}
|
||||||
|
CryptMsgClose(msg);
|
||||||
|
|
||||||
|
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, CMSG_DETACHED_FLAG,
|
||||||
|
CMSG_DATA, NULL, NULL, NULL);
|
||||||
|
/* Dont appear to be able to update CMSG-DATA with non-final updates */
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptMsgUpdate(msg, NULL, 0, FALSE);
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||||
|
"Expected E_INVALIDARG, got %x\n", GetLastError());
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||||
|
"Expected E_INVALIDARG, got %x\n", GetLastError());
|
||||||
|
ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
|
||||||
|
ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
|
||||||
|
CryptMsgClose(msg);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_data_msg(void)
|
static void test_data_msg(void)
|
||||||
{
|
{
|
||||||
test_data_msg_open();
|
test_data_msg_open();
|
||||||
|
test_data_msg_update();
|
||||||
}
|
}
|
||||||
|
|
||||||
START_TEST(msg)
|
START_TEST(msg)
|
||||||
|
|
Loading…
Reference in New Issue