Module: wine Branch: master Commit: deb07ccb1c5258e2097b591263cd6993a893bba3 URL: http://source.winehq.org/git/wine.git/?a=commit;h=deb07ccb1c5258e2097b591263...
Author: Juan Lang juan.lang@gmail.com Date: Mon Sep 17 15:07:58 2007 -0700
crypt32: Return bytes decoded from AsnDecodeArray.
---
dlls/crypt32/decode.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index 323a942..21383ba 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -524,12 +524,13 @@ static BOOL CRYPT_AsnDecodeArray(const struct AsnArrayDescriptor *arrayDesc,
if ((ret = CRYPT_GetLen(pbEncoded, cbEncoded, &dataLen))) { - DWORD bytesNeeded, cItems = 0; + DWORD bytesNeeded, cItems = 0, decoded; BYTE lenBytes = GET_LEN_BYTES(pbEncoded[1]); /* There can be arbitrarily many items, but there is often only one. */ struct AsnArrayItemSize itemSize = { 0 }, *itemSizes = &itemSize;
+ decoded = 1 + lenBytes; bytesNeeded = sizeof(struct GenericArray); if (dataLen) { @@ -538,7 +539,7 @@ static BOOL CRYPT_AsnDecodeArray(const struct AsnArrayDescriptor *arrayDesc, for (ptr = pbEncoded + 1 + lenBytes; ret && ptr - pbEncoded - 1 - lenBytes < dataLen; ) { - DWORD itemLenBytes, itemDataLen, size = 0; + DWORD itemLenBytes, itemDataLen, itemDecoded, size = 0;
itemLenBytes = GET_LEN_BYTES(ptr[1]); /* Each item decoded may not tolerate extraneous bytes, so @@ -549,7 +550,8 @@ static BOOL CRYPT_AsnDecodeArray(const struct AsnArrayDescriptor *arrayDesc, if (ret) ret = arrayDesc->decodeFunc(ptr, 1 + itemLenBytes + itemDataLen, - dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, &size, NULL); + dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, &size, + &itemDecoded); if (ret) { DWORD nextLen; @@ -568,6 +570,7 @@ static BOOL CRYPT_AsnDecodeArray(const struct AsnArrayDescriptor *arrayDesc, } if (itemSizes) { + decoded += itemDecoded; itemSizes[cItems - 1].encodedLen = 1 + itemLenBytes + itemDataLen; itemSizes[cItems - 1].size = size; @@ -594,6 +597,8 @@ static BOOL CRYPT_AsnDecodeArray(const struct AsnArrayDescriptor *arrayDesc, const BYTE *ptr; struct GenericArray *array;
+ if (pcbDecoded) + *pcbDecoded = decoded; if (dwFlags & CRYPT_DECODE_ALLOC_FLAG) pvStructInfo = *(BYTE **)pvStructInfo; array = (struct GenericArray *)pvStructInfo;