From 9490fff129e215dccafb8f9b4a933baaf3d4f661 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Mon, 17 Sep 2007 15:07:58 -0700 Subject: [PATCH] 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 s 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 s 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 s 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 s } 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 s const BYTE *ptr; struct GenericArray *array; + if (pcbDecoded) + *pcbDecoded = decoded; if (dwFlags & CRYPT_DECODE_ALLOC_FLAG) pvStructInfo = *(BYTE **)pvStructInfo; array = (struct GenericArray *)pvStructInfo; -- 1.4.1