crypt32(7/7): According to MSDN, inner content is only decoded when the content type is data

Juan Lang juan.lang at gmail.com
Tue Aug 7 17:03:18 CDT 2007


--Juan
-------------- next part --------------
From d1db1a63e29e8816e672d1b9e8257844094409a6 Mon Sep 17 00:00:00 2001
From: Juan Lang <juanlang at juan.corp.google.com>
Date: Tue, 7 Aug 2007 14:57:04 -0700
Subject: [PATCH] According to MSDN, inner content is only decoded when the content type is data
---
 dlls/crypt32/msg.c |   30 ++++++++++++++++++------------
 1 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 30ec62a..70527bd 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -1742,20 +1742,26 @@ static BOOL CDecodeSignedMsg_GetParam(CD
     case CMSG_CONTENT_PARAM:
         if (msg->u.signedInfo)
         {
-            CRYPT_DATA_BLOB *blob;
-            DWORD size;
-
-            /* FIXME: does this depend on inner content type? */
-            ret = CryptDecodeObjectEx(X509_ASN_ENCODING, X509_OCTET_STRING,
-             msg->u.signedInfo->content.Content.pbData,
-             msg->u.signedInfo->content.Content.cbData, CRYPT_DECODE_ALLOC_FLAG,
-             NULL, (LPBYTE)&blob, &size);
-            if (ret)
+            if (!strcmp(msg->u.signedInfo->content.pszObjId, szOID_RSA_data))
             {
-                ret = CRYPT_CopyParam(pvData, pcbData, blob->pbData,
-                 blob->cbData);
-                LocalFree(blob);
+                CRYPT_DATA_BLOB *blob;
+                DWORD size;
+
+                ret = CryptDecodeObjectEx(X509_ASN_ENCODING, X509_OCTET_STRING,
+                 msg->u.signedInfo->content.Content.pbData,
+                 msg->u.signedInfo->content.Content.cbData,
+                 CRYPT_DECODE_ALLOC_FLAG, NULL, (LPBYTE)&blob, &size);
+                if (ret)
+                {
+                    ret = CRYPT_CopyParam(pvData, pcbData, blob->pbData,
+                     blob->cbData);
+                    LocalFree(blob);
+                }
             }
+            else
+                ret = CRYPT_CopyParam(pvData, pcbData,
+                 msg->u.signedInfo->content.Content.pbData,
+                 msg->u.signedInfo->content.Content.cbData);
         }
         else
             SetLastError(CRYPT_E_INVALID_MSG_TYPE);
-- 
1.4.1


More information about the wine-patches mailing list