Fix casts in dlls/crypt32/decode.c

Gerald Pfeifer gerald at pfeifer.com
Mon Oct 15 06:58:45 CDT 2007


Thanks for all your feedback! 

On Mon, 15 Oct 2007, Dmitry Timoshkov wrote:
> Your fix still won't work for a 64-bit target. You would need to use
> ULONG_PTR cast for that. 'if (!HIWORD(lpszStructType))' line also doesn't
> look right in the 64-bit case.

The latter is left unchanged and I'll leave this to someone with more
insight into Win64 if that's okay, but based on feedback from Robert...

On Mon, 15 Oct 2007, Robert Shearman wrote:
> You're just passing the problem on to people doing 64-bit builds. You 
> should use DWORD_PTR or use LOWORD everywhere, like you suggested.

...and Francois...

On Mon, 15 Oct 2007, Francois Gouget wrote:
> The X509_* constants all look like small integers disguised as string 
> pointers so the LOWORD() approach is probably the one that makes the 
> most sense.

...please find below an updated patch for dlls/crypt32/encode.c.

ChangeLog:
Fix incorrect casts in X509_CERT and friends.

Index: dlls/crypt32/encode.c
===================================================================
RCS file: /home/wine/wine/dlls/crypt32/encode.c,v
retrieving revision 1.92
diff -u -3 -p -r1.92 encode.c
--- dlls/crypt32/encode.c	12 Oct 2007 10:24:12 -0000	1.92
+++ dlls/crypt32/encode.c	15 Oct 2007 11:38:46 -0000
@@ -3488,101 +3488,101 @@ static CryptEncodeObjectExFunc CRYPT_Get
     {
         switch (LOWORD(lpszStructType))
         {
-        case (WORD)X509_CERT:
+        case LOWORD(X509_CERT):
             encodeFunc = CRYPT_AsnEncodeCert;
             break;
-        case (WORD)X509_CERT_TO_BE_SIGNED:
+        case LOWORD(X509_CERT_TO_BE_SIGNED):
             encodeFunc = CRYPT_AsnEncodeCertInfo;
             break;
-        case (WORD)X509_CERT_CRL_TO_BE_SIGNED:
+        case LOWORD(X509_CERT_CRL_TO_BE_SIGNED):
             encodeFunc = CRYPT_AsnEncodeCRLInfo;
             break;
-        case (WORD)X509_EXTENSIONS:
+        case LOWORD(X509_EXTENSIONS):
             encodeFunc = CRYPT_AsnEncodeExtensions;
             break;
-        case (WORD)X509_NAME_VALUE:
+        case LOWORD(X509_NAME_VALUE):
             encodeFunc = CRYPT_AsnEncodeNameValue;
             break;
-        case (WORD)X509_NAME:
+        case LOWORD(X509_NAME):
             encodeFunc = CRYPT_AsnEncodeName;
             break;
-        case (WORD)X509_PUBLIC_KEY_INFO:
+        case LOWORD(X509_PUBLIC_KEY_INFO):
             encodeFunc = CRYPT_AsnEncodePubKeyInfo;
             break;
-        case (WORD)X509_AUTHORITY_KEY_ID:
+        case LOWORD(X509_AUTHORITY_KEY_ID):
             encodeFunc = CRYPT_AsnEncodeAuthorityKeyId;
             break;
-        case (WORD)X509_ALTERNATE_NAME:
+        case LOWORD(X509_ALTERNATE_NAME):
             encodeFunc = CRYPT_AsnEncodeAltName;
             break;
-        case (WORD)X509_BASIC_CONSTRAINTS:
+        case LOWORD(X509_BASIC_CONSTRAINTS):
             encodeFunc = CRYPT_AsnEncodeBasicConstraints;
             break;
-        case (WORD)X509_BASIC_CONSTRAINTS2:
+        case LOWORD(X509_BASIC_CONSTRAINTS2):
             encodeFunc = CRYPT_AsnEncodeBasicConstraints2;
             break;
-        case (WORD)RSA_CSP_PUBLICKEYBLOB:
+        case LOWORD(RSA_CSP_PUBLICKEYBLOB):
             encodeFunc = CRYPT_AsnEncodeRsaPubKey;
             break;
-        case (WORD)X509_UNICODE_NAME:
+        case LOWORD(X509_UNICODE_NAME):
             encodeFunc = CRYPT_AsnEncodeUnicodeName;
             break;
-        case (WORD)PKCS_CONTENT_INFO:
+        case LOWORD(PKCS_CONTENT_INFO):
             encodeFunc = CRYPT_AsnEncodePKCSContentInfo;
             break;
-        case (WORD)PKCS_ATTRIBUTE:
+        case LOWORD(PKCS_ATTRIBUTE):
             encodeFunc = CRYPT_AsnEncodePKCSAttribute;
             break;
-        case (WORD)X509_UNICODE_NAME_VALUE:
+        case LOWORD(X509_UNICODE_NAME_VALUE):
             encodeFunc = CRYPT_AsnEncodeUnicodeNameValue;
             break;
-        case (WORD)X509_OCTET_STRING:
+        case LOWORD(X509_OCTET_STRING):
             encodeFunc = CRYPT_AsnEncodeOctets;
             break;
-        case (WORD)X509_BITS:
-        case (WORD)X509_KEY_USAGE:
+        case LOWORD(X509_BITS):
+        case LOWORD(X509_KEY_USAGE):
             encodeFunc = CRYPT_AsnEncodeBits;
             break;
-        case (WORD)X509_INTEGER:
+        case LOWORD(X509_INTEGER):
             encodeFunc = CRYPT_AsnEncodeInt;
             break;
-        case (WORD)X509_MULTI_BYTE_INTEGER:
+        case LOWORD(X509_MULTI_BYTE_INTEGER):
             encodeFunc = CRYPT_AsnEncodeInteger;
             break;
-        case (WORD)X509_MULTI_BYTE_UINT:
+        case LOWORD(X509_MULTI_BYTE_UINT):
             encodeFunc = CRYPT_AsnEncodeUnsignedInteger;
             break;
-        case (WORD)X509_ENUMERATED:
+        case LOWORD(X509_ENUMERATED):
             encodeFunc = CRYPT_AsnEncodeEnumerated;
             break;
-        case (WORD)X509_CHOICE_OF_TIME:
+        case LOWORD(X509_CHOICE_OF_TIME):
             encodeFunc = CRYPT_AsnEncodeChoiceOfTime;
             break;
-        case (WORD)X509_AUTHORITY_KEY_ID2:
+        case LOWORD(X509_AUTHORITY_KEY_ID2):
             encodeFunc = CRYPT_AsnEncodeAuthorityKeyId2;
             break;
-        case (WORD)X509_SEQUENCE_OF_ANY:
+        case LOWORD(X509_SEQUENCE_OF_ANY):
             encodeFunc = CRYPT_AsnEncodeSequenceOfAny;
             break;
-        case (WORD)PKCS_UTC_TIME:
+        case LOWORD(PKCS_UTC_TIME):
             encodeFunc = CRYPT_AsnEncodeUtcTime;
             break;
-        case (WORD)X509_CRL_DIST_POINTS:
+        case LOWORD(X509_CRL_DIST_POINTS):
             encodeFunc = CRYPT_AsnEncodeCRLDistPoints;
             break;
-        case (WORD)X509_ENHANCED_KEY_USAGE:
+        case LOWORD(X509_ENHANCED_KEY_USAGE):
             encodeFunc = CRYPT_AsnEncodeEnhancedKeyUsage;
             break;
-        case (WORD)PKCS_ATTRIBUTES:
+        case LOWORD(PKCS_ATTRIBUTES):
             encodeFunc = CRYPT_AsnEncodePKCSAttributes;
             break;
-        case (WORD)X509_ISSUING_DIST_POINT:
+        case LOWORD(X509_ISSUING_DIST_POINT):
             encodeFunc = CRYPT_AsnEncodeIssuingDistPoint;
             break;
-        case (WORD)X509_NAME_CONSTRAINTS:
+        case LOWORD(X509_NAME_CONSTRAINTS):
             encodeFunc = CRYPT_AsnEncodeNameConstraints;
             break;
-        case (WORD)PKCS7_SIGNER_INFO:
+        case LOWORD(PKCS7_SIGNER_INFO):
             encodeFunc = CRYPT_AsnEncodePKCSSignerInfo;
             break;
         }



More information about the wine-devel mailing list