crypt32: Test and fix CryptMsgGetParam for streamed messages.
This commit is contained in:
parent
b18b05f53c
commit
e557d36320
|
@ -132,6 +132,9 @@ static BOOL CDataEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
|||
switch (dwParamType)
|
||||
{
|
||||
case CMSG_CONTENT_PARAM:
|
||||
if (msg->base.streamed)
|
||||
SetLastError(E_INVALIDARG);
|
||||
else
|
||||
{
|
||||
CRYPT_CONTENT_INFO info;
|
||||
char rsa_data[] = "1.2.840.113549.1.7.1";
|
||||
|
@ -141,10 +144,12 @@ static BOOL CDataEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
|||
info.Content.pbData = msg->bare_content;
|
||||
ret = CryptEncodeObject(X509_ASN_ENCODING, PKCS_CONTENT_INFO, &info,
|
||||
pvData, pcbData);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case CMSG_BARE_CONTENT_PARAM:
|
||||
if (!pvData)
|
||||
if (msg->base.streamed)
|
||||
SetLastError(E_INVALIDARG);
|
||||
else if (!pvData)
|
||||
{
|
||||
*pcbData = msg->bare_content_len;
|
||||
ret = TRUE;
|
||||
|
|
|
@ -345,6 +345,12 @@ static void test_data_msg_open(void)
|
|||
|
||||
static const BYTE msgData[] = { 1, 2, 3, 4 };
|
||||
|
||||
static BOOL WINAPI nop_stream_output(const void *pvArg, BYTE *pb, DWORD cb,
|
||||
BOOL final)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void test_data_msg_update(void)
|
||||
{
|
||||
HCRYPTMSG msg;
|
||||
|
@ -403,11 +409,12 @@ static void test_data_msg_get_param(void)
|
|||
HCRYPTMSG msg;
|
||||
DWORD size;
|
||||
BOOL ret;
|
||||
CMSG_STREAM_INFO streamInfo = { 0, nop_stream_output, NULL };
|
||||
|
||||
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL, NULL,
|
||||
NULL);
|
||||
|
||||
/* Content and bare content are always gettable */
|
||||
/* Content and bare content are always gettable when not streaming */
|
||||
size = 0;
|
||||
ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, NULL, &size);
|
||||
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
|
||||
|
@ -430,6 +437,19 @@ static void test_data_msg_get_param(void)
|
|||
ok(!ret && GetLastError() == CRYPT_E_INVALID_MSG_TYPE,
|
||||
"Expected CRYPT_E_INVALID_MSG_TYPE, got %x\n", GetLastError());
|
||||
CryptMsgClose(msg);
|
||||
|
||||
/* Can't get content or bare content when streaming */
|
||||
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, NULL,
|
||||
NULL, &streamInfo);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptMsgGetParam(msg, CMSG_BARE_CONTENT_PARAM, 0, NULL, &size);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %x\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, NULL, &size);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %x\n", GetLastError());
|
||||
CryptMsgClose(msg);
|
||||
}
|
||||
|
||||
static const BYTE dataEmptyBareContent[] = { 0x04,0x00 };
|
||||
|
|
Loading…
Reference in New Issue