crypt32: Fix a couple of assumptions about structure layout.
authorAlexandre Julliard <julliard@winehq.org>
Mon, 22 Jun 2009 12:53:24 +0000 (14:53 +0200)
committerAlexander Morozov <amorozov@etersoft.ru>
Thu, 1 Jul 2010 13:17:55 +0000 (17:17 +0400)
dlls/crypt32/decode.c
dlls/crypt32/encode.c

index 2c2b543e852ea02bc6f2873678652df4f5a1c2bf..7a33e6afa5ed174cac1ab9970614f097c43bc05e 100644 (file)
@@ -523,7 +523,7 @@ static BOOL CRYPT_AsnDecodeSequence(struct AsnDecodeSequenceItem items[],
                 for (i = 0; i < cItem; i++)
                 {
                     bytesNeeded += items[i].size;
-                    structSize += items[i].minSize;
+                    structSize = max( structSize, items[i].offset + items[i].minSize );
                 }
                 if (pcbDecoded)
                     *pcbDecoded = 1 + lenBytes + cbDecoded;
index 45f628b6616671260a64b0e9e875f1930c0b55d8..e2468db224ec75f887a0fcc23745bc7c45acb230 100644 (file)
@@ -564,13 +564,12 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLEntries(DWORD dwCertEncodingType,
  LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
  PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
 {
-    DWORD cCRLEntry = *(const DWORD *)pvStructInfo;
     DWORD bytesNeeded, dataLen, lenBytes, i;
-    const CRL_ENTRY *rgCRLEntry = *(const CRL_ENTRY *const *)
-     ((const BYTE *)pvStructInfo + sizeof(DWORD));
+    const CRL_INFO *info = pvStructInfo;
+    const CRL_ENTRY *rgCRLEntry = info->rgCRLEntry;
     BOOL ret = TRUE;
 
-    for (i = 0, dataLen = 0; ret && i < cCRLEntry; i++)
+    for (i = 0, dataLen = 0; ret && i < info->cCRLEntry; i++)
     {
         DWORD size;
 
@@ -594,7 +593,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLEntries(DWORD dwCertEncodingType,
                 *pbEncoded++ = ASN_SEQUENCEOF;
                 CRYPT_EncodeLen(dataLen, pbEncoded, &lenBytes);
                 pbEncoded += lenBytes;
-                for (i = 0; i < cCRLEntry; i++)
+                for (i = 0; i < info->cCRLEntry; i++)
                 {
                     DWORD size = dataLen;
 
@@ -659,7 +658,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLInfo(DWORD dwCertEncodingType,
         }
         if (info->cCRLEntry)
         {
-            items[cItem].pvStructInfo = &info->cCRLEntry;
+            items[cItem].pvStructInfo = info;
             items[cItem].encodeFunc = CRYPT_AsnEncodeCRLEntries;
             cItem++;
         }