* leaves that up to the caller.
*/
static BOOL CRYPT_AsnDecodeArrayNoAlloc(const struct AsnArrayDescriptor *arrayDesc,
- const BYTE *pbEncoded, DWORD cbEncoded, void *pvStructInfo,
+ const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo,
DWORD *pcbStructInfo, DWORD *pcbDecoded)
{
BOOL ret = TRUE;
}
if (ret)
ret = arrayDesc->decodeFunc(ptr, itemEncoded,
- 0, NULL, &size, &itemDecoded);
+ dwFlags, NULL, &size, &itemDecoded);
if (ret)
{
cItems++;
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
TRACE("Returning %d (%08x)\n", ret, GetLastError());
return ret;
}
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
DWORD bytesNeeded;
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- NULL, &bytesNeeded, NULL);
+ dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, &bytesNeeded, NULL);
if (ret)
{
if (!pvStructInfo)
exts->rgExtension = (CERT_EXTENSION *)((BYTE *)exts +
sizeof(CERT_EXTENSIONS));
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded,
- cbEncoded, &exts->cExtension, &bytesNeeded, NULL);
+ cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG,
+ &exts->cExtension, &bytesNeeded, NULL);
}
}
}
BOOL ret;
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
offsetof(CRYPT_SMIME_CAPABILITY, pszObjId) };
if ((ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- NULL, &bytesNeeded, NULL)))
+ dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, &bytesNeeded, NULL)))
{
if (!pvStructInfo)
*pcbStructInfo = bytesNeeded;
(PCRYPT_SMIME_CAPABILITY)((BYTE *)pvStructInfo +
sizeof(CRYPT_SMIME_CAPABILITIES));
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc,
- pbEncoded, cbEncoded, &capabilities->cCapability,
- pcbStructInfo, NULL);
+ pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG,
+ &capabilities->cCapability, pcbStructInfo, NULL);
}
}
}
pvStructInfo, pvStructInfo ? *pcbDecoded : 0);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
TRACE("returning %d\n", ret);
return ret;
}
pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
DWORD bytesNeeded;
if ((ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded,
- cbEncoded, NULL, &bytesNeeded, NULL)))
+ cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, &bytesNeeded,
+ NULL)))
{
if (!pvStructInfo)
*pcbStructInfo = bytesNeeded;
attrs->rgAttr = (PCRYPT_ATTRIBUTE)((BYTE *)pvStructInfo +
sizeof(CRYPT_ATTRIBUTES));
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded,
- cbEncoded, &attrs->cAttr, &bytesNeeded, NULL);
+ cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG,
+ &attrs->cAttr, &bytesNeeded, NULL);
}
}
}
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
TRACE("Returning %d (%08x)\n", ret, GetLastError());
return ret;
}
pvStructInfo, pvStructInfo ? *pcbStructInfo : 0);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
TRACE("Returning %d (%08x)\n", ret, GetLastError());
return ret;
}
{
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc,
pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
- NULL, &nameLen, NULL);
+ dwFlags, NULL, &nameLen, NULL);
bytesNeeded = sizeof(CRL_DIST_POINT_NAME) + nameLen -
FINALMEMBERSIZE(CRL_DIST_POINT_NAME, u);
}
name->dwDistPointNameChoice = CRL_DIST_POINT_FULL_NAME;
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc,
pbEncoded + 1 + lenBytes, cbEncoded - 1 - lenBytes,
- &name->u.FullName.cAltEntry, &nameLen, NULL);
+ dwFlags, &name->u.FullName.cAltEntry, &nameLen, NULL);
}
else
name->dwDistPointNameChoice = CRL_DIST_POINT_NO_NAME;
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
pvStructInfo, pvStructInfo ? *pcbStructInfo : 0, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}
pvStructInfo, *pcbStructInfo, pcbDecoded);
ret = CRYPT_AsnDecodeArrayNoAlloc(&arrayDesc, pbEncoded, cbEncoded,
- pvStructInfo, pcbStructInfo, pcbDecoded);
+ dwFlags, pvStructInfo, pcbStructInfo, pcbDecoded);
return ret;
}