From 026a849c3a3df6ae72ef036d248078c6086aedc0 Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Mon, 17 Sep 2007 18:02:26 -0700 Subject: [PATCH] Use decode function's returned decoded length to advance pointer when decoding an array --- dlls/crypt32/decode.c | 11 ++++------- 1 files changed, 4 insertions(+), 7 deletions(-) diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c index caf34cb..082c28a 100644 --- a/dlls/crypt32/decode.c +++ b/dlls/crypt32/decode.c @@ -709,6 +709,8 @@ static BOOL CRYPT_AsnDecodeArray(const s i < cItems && ptr - pbEncoded - 1 - lenBytes < dataLen; i++) { + DWORD itemDecoded; + if (arrayDesc->hasPointer) *(BYTE **)(array->rgItems + i * arrayDesc->itemSize + arrayDesc->pointerOffset) = nextData; @@ -716,16 +718,11 @@ static BOOL CRYPT_AsnDecodeArray(const s itemSizes[i].encodedLen, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, array->rgItems + i * arrayDesc->itemSize, - &itemSizes[i].size, NULL); + &itemSizes[i].size, &itemDecoded); if (ret) { - DWORD nextLen; - nextData += itemSizes[i].size - arrayDesc->itemSize; - ret = CRYPT_GetLen(ptr, - cbEncoded - (ptr - pbEncoded), &nextLen); - if (ret) - ptr += nextLen + 1 + GET_LEN_BYTES(ptr[1]); + ptr += itemDecoded; } } } -- 1.4.1