Juan Lang : crypt32: Copy data in hash message update.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jul 13 08:30:26 CDT 2007
Module: wine
Branch: master
Commit: fef57dad46893908e4bf956bb5ad4f13340c72f4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fef57dad46893908e4bf956bb5ad4f13340c72f4
Author: Juan Lang <juan.lang at gmail.com>
Date: Thu Jul 12 14:52:41 2007 -0700
crypt32: Copy data in hash message update.
---
dlls/crypt32/msg.c | 29 +++++++++++++++++++++++------
1 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 4668d2f..f247b23 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -315,15 +315,17 @@ static HCRYPTMSG CDataEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo,
typedef struct _CHashEncodeMsg
{
- CryptMsgBase base;
- HCRYPTPROV prov;
- HCRYPTHASH hash;
+ CryptMsgBase base;
+ HCRYPTPROV prov;
+ HCRYPTHASH hash;
+ CRYPT_DATA_BLOB data;
} CHashEncodeMsg;
static void CHashEncodeMsg_Close(HCRYPTMSG hCryptMsg)
{
CHashEncodeMsg *msg = (CHashEncodeMsg *)hCryptMsg;
+ CryptMemFree(msg->data.pbData);
CryptDestroyHash(msg->hash);
if (msg->base.open_flags & CMSG_CRYPT_RELEASE_CONTEXT_FLAG)
CryptReleaseContext(msg->prov, 0);
@@ -400,9 +402,22 @@ static BOOL CHashEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData,
else
{
ret = CryptHashData(msg->hash, pbData, cbData, 0);
- /* Still a stub, as content isn't modified */
- FIXME("(%p, %p, %d, %d): stub\n", hCryptMsg, pbData, cbData,
- fFinal);
+ if (ret)
+ {
+ if (msg->data.pbData)
+ msg->data.pbData = CryptMemRealloc(msg->data.pbData,
+ msg->data.cbData + cbData);
+ else
+ msg->data.pbData = CryptMemAlloc(cbData);
+ if (msg->data.pbData)
+ {
+ memcpy(msg->data.pbData + msg->data.cbData, pbData,
+ cbData);
+ msg->data.cbData += cbData;
+ }
+ else
+ ret = FALSE;
+ }
}
}
}
@@ -441,6 +456,8 @@ static HCRYPTMSG CHashEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo,
CryptMsgBase_Init((CryptMsgBase *)msg, dwFlags, pStreamInfo,
CHashEncodeMsg_Close, CHashEncodeMsg_GetParam, CHashEncodeMsg_Update);
msg->prov = prov;
+ msg->data.cbData = 0;
+ msg->data.pbData = NULL;
if (!CryptCreateHash(prov, algID, 0, 0, &msg->hash))
{
CryptMsgClose(msg);
More information about the wine-cvs
mailing list