crypt32: Correct CryptVerifyMessageSignature's use of pcbDecoded.

This commit is contained in:
Juan Lang 2010-08-20 16:26:35 -07:00 committed by Alexandre Julliard
parent faa917b567
commit 78c9015861
2 changed files with 14 additions and 4 deletions

View File

@ -210,9 +210,6 @@ BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
if (msg)
{
ret = CryptMsgUpdate(msg, pbSignedBlob, cbSignedBlob, TRUE);
if (ret && pcbDecoded)
ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, pbDecoded,
pcbDecoded);
if (ret)
{
CERT_INFO *certInfo = CRYPT_GetSignerCertInfoFromMsg(msg,
@ -244,6 +241,20 @@ BOOL WINAPI CryptVerifyMessageSignature(PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
}
CryptMemFree(certInfo);
}
if (ret)
{
/* The caller is expected to pass a valid pointer to pcbDecoded
* when the message verifies successfully.
*/
if (pcbDecoded)
ret = CryptMsgGetParam(msg, CMSG_CONTENT_PARAM, 0, pbDecoded,
pcbDecoded);
else
{
SetLastError(CRYPT_E_NOT_FOUND);
ret = FALSE;
}
}
CryptMsgClose(msg);
}
if(!ret && pcbDecoded)

View File

@ -580,7 +580,6 @@ static void test_verify_message_signature(void)
ret = CryptVerifyMessageSignature(&para, 0,
signedWithCertWithValidPubKeyContent,
sizeof(signedWithCertWithValidPubKeyContent), NULL, 0, NULL);
todo_wine
ok(!ret, "Expected failure\n");
/* Finally, a message signed with a valid public key verifies successfully
*/