wintrust: Avoid assigning to struct members from other structs
Andrew Talbot
andrew.talbot at talbotville.com
Fri Apr 4 11:56:34 CDT 2008
Some static analysis tools cannot handle code of the form
STRUCTA x = {y, structb, z};
They at least require it to be of the form
STRUCTA x = {y, {structb.a, structb.b, structb.c}, z};
In fact, I think it may be strictly incorrect to initialize a struct (when
defining it) with values that are not "computable at load time". Hence, this patch.
-- Andy.
---
Changelog:
wintrust: Avoid assigning to struct members from other structs.
diff --git a/dlls/wintrust/register.c b/dlls/wintrust/register.c
index 1657815..e039ab4 100644
--- a/dlls/wintrust/register.c
+++ b/dlls/wintrust/register.c
@@ -62,6 +62,8 @@ static CRYPT_TRUST_REG_ENTRY DriverCleanupPolicy;
static CRYPT_TRUST_REG_ENTRY GenericChainCertificateTrust;
static CRYPT_TRUST_REG_ENTRY GenericChainFinalProv;
+static const CRYPT_TRUST_REG_ENTRY NullCTRE = { 0, NULL, NULL };
+
static const WCHAR Trust[] = {'S','o','f','t','w','a','r','e','\\',
'M','i','c','r','o','s','o','f','t','\\',
'C','r','y','p','t','o','g','r','a','p','h','y','\\',
@@ -419,21 +421,23 @@ static BOOL WINTRUST_RegisterGenVerifyV2(void)
{
BOOL RegisteredOK = TRUE;
static GUID ProvGUID = WINTRUST_ACTION_GENERIC_VERIFY_V2;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- SoftpubInitialization,
- SoftpubMessage,
- SoftpubSignature,
- SoftpubCertficate,
- SoftpubCertCheck,
- SoftpubFinalPolicy,
- { 0, NULL, NULL }, /* No diagnostic policy */
- SoftpubCleanup };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
CRYPT_PROVIDER_REGDEFUSAGE DefUsage = { sizeof(CRYPT_PROVIDER_REGDEFUSAGE),
&ProvGUID,
NULL, /* No Dll provided */
NULL, /* No load callback function */
NULL }; /* No free callback function */
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = SoftpubInitialization;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = SoftpubCertficate;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = SoftpubFinalPolicy;
+ ProvInfo.sTestPolicyProvider = NullCTRE; /* No diagnostic policy */
+ ProvInfo.sCleanupProvider = SoftpubCleanup;
+
if (!WintrustAddDefaultForUsage(szOID_PKIX_KP_CODE_SIGNING, &DefUsage))
RegisteredOK = FALSE;
@@ -455,15 +459,17 @@ static BOOL WINTRUST_RegisterGenVerifyV2(void)
static BOOL WINTRUST_RegisterPublishedSoftware(void)
{
static GUID ProvGUID = WIN_SPUB_ACTION_PUBLISHED_SOFTWARE;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- SoftpubInitialization,
- SoftpubMessage,
- SoftpubSignature,
- SoftpubCertficate,
- SoftpubCertCheck,
- SoftpubFinalPolicy,
- { 0, NULL, NULL }, /* No diagnostic policy */
- SoftpubCleanup };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
+
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = SoftpubInitialization;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = SoftpubCertficate;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = SoftpubFinalPolicy;
+ ProvInfo.sTestPolicyProvider = NullCTRE; /* No diagnostic policy */
+ ProvInfo.sCleanupProvider = SoftpubCleanup;
if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
return FALSE;
@@ -485,15 +491,17 @@ static BOOL WINTRUST_RegisterPublishedSoftware(void)
static BOOL WINTRUST_RegisterPublishedSoftwareNoBadUi(void)
{
static GUID ProvGUID = WIN_SPUB_ACTION_PUBLISHED_SOFTWARE_NOBADUI;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- SoftpubInitialization,
- SoftpubMessage,
- SoftpubSignature,
- SoftpubCertficate,
- SoftpubCertCheck,
- SoftpubFinalPolicy,
- { 0, NULL, NULL }, /* No diagnostic policy */
- SoftpubCleanup };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
+
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = SoftpubInitialization;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = SoftpubCertficate;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = SoftpubFinalPolicy;
+ ProvInfo.sTestPolicyProvider = NullCTRE; /* No diagnostic policy */
+ ProvInfo.sCleanupProvider = SoftpubCleanup;
if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
return FALSE;
@@ -513,15 +521,17 @@ static BOOL WINTRUST_RegisterPublishedSoftwareNoBadUi(void)
static BOOL WINTRUST_RegisterGenCertVerify(void)
{
static GUID ProvGUID = WINTRUST_ACTION_GENERIC_CERT_VERIFY;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- SoftpubDefCertInit,
- SoftpubMessage,
- SoftpubSignature,
- SoftpubCertficate,
- SoftpubCertCheck,
- SoftpubFinalPolicy,
- { 0, NULL, NULL }, /* No diagnostic policy */
- SoftpubCleanup };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
+
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = SoftpubDefCertInit;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = SoftpubCertficate;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = SoftpubFinalPolicy;
+ ProvInfo.sTestPolicyProvider = NullCTRE; /* No diagnostic policy */
+ ProvInfo.sCleanupProvider = SoftpubCleanup;
if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
return FALSE;
@@ -541,15 +551,17 @@ static BOOL WINTRUST_RegisterGenCertVerify(void)
static BOOL WINTRUST_RegisterTrustProviderTest(void)
{
static GUID ProvGUID = WINTRUST_ACTION_TRUSTPROVIDER_TEST;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- SoftpubInitialization,
- SoftpubMessage,
- SoftpubSignature,
- SoftpubCertficate,
- SoftpubCertCheck,
- SoftpubFinalPolicy,
- SoftpubDumpStructure,
- SoftpubCleanup };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
+
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = SoftpubInitialization;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = SoftpubCertficate;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = SoftpubFinalPolicy;
+ ProvInfo.sTestPolicyProvider = SoftpubDumpStructure;
+ ProvInfo.sCleanupProvider = SoftpubCleanup;
if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
return FALSE;
@@ -572,21 +584,23 @@ static BOOL WINTRUST_RegisterHttpsProv(void)
static CHAR SoftpubLoadUsage[] = "SoftpubLoadDefUsageCallData";
static CHAR SoftpubFreeUsage[] = "SoftpubFreeDefUsageCallData";
static GUID ProvGUID = HTTPSPROV_ACTION;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- SoftpubInitialization,
- SoftpubMessage,
- SoftpubSignature,
- HTTPSCertificateTrust,
- SoftpubCertCheck,
- HTTPSFinalProv,
- { 0, NULL, NULL }, /* No diagnostic policy */
- SoftpubCleanup };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
CRYPT_PROVIDER_REGDEFUSAGE DefUsage = { sizeof(CRYPT_PROVIDER_REGDEFUSAGE),
&ProvGUID,
NULL, /* Will be filled later */
SoftpubLoadUsage,
SoftpubFreeUsage };
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = SoftpubInitialization;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = HTTPSCertificateTrust;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = HTTPSFinalProv;
+ ProvInfo.sTestPolicyProvider = NullCTRE; /* No diagnostic policy */
+ ProvInfo.sCleanupProvider = SoftpubCleanup;
+
DefUsage.pwszDllName = WINTRUST_Alloc(sizeof(SP_POLICY_PROVIDER_DLL_NAME));
lstrcpyW(DefUsage.pwszDllName, SP_POLICY_PROVIDER_DLL_NAME);
@@ -619,15 +633,18 @@ static BOOL WINTRUST_RegisterHttpsProv(void)
static BOOL WINTRUST_RegisterOfficeSignVerify(void)
{
static GUID ProvGUID = OFFICESIGN_ACTION_VERIFY;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- OfficeInitializePolicy,
- SoftpubMessage,
- SoftpubSignature,
- SoftpubCertficate,
- SoftpubCertCheck,
- SoftpubFinalPolicy,
- { 0, NULL, NULL }, /* No diagnostic policy */
- OfficeCleanupPolicy };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
+
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = OfficeInitializePolicy;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = SoftpubCertficate;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = SoftpubFinalPolicy;
+ ProvInfo.sTestPolicyProvider = NullCTRE; /* No diagnostic policy */
+ ProvInfo.sCleanupProvider = OfficeCleanupPolicy;
+
if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
return FALSE;
@@ -647,15 +664,18 @@ static BOOL WINTRUST_RegisterOfficeSignVerify(void)
static BOOL WINTRUST_RegisterDriverVerify(void)
{
static GUID ProvGUID = DRIVER_ACTION_VERIFY;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- DriverInitializePolicy,
- SoftpubMessage,
- SoftpubSignature,
- SoftpubCertficate,
- SoftpubCertCheck,
- DriverFinalPolicy,
- { 0, NULL, NULL }, /* No diagnostic policy */
- DriverCleanupPolicy };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
+
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = DriverInitializePolicy;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = SoftpubCertficate;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = DriverFinalPolicy;
+ ProvInfo.sTestPolicyProvider = NullCTRE; /* No diagnostic policy */
+ ProvInfo.sCleanupProvider = DriverCleanupPolicy;
+
if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
return FALSE;
@@ -675,15 +695,17 @@ static BOOL WINTRUST_RegisterDriverVerify(void)
static BOOL WINTRUST_RegisterGenChainVerify(void)
{
static GUID ProvGUID = WINTRUST_ACTION_GENERIC_CHAIN_VERIFY;
- CRYPT_REGISTER_ACTIONID ProvInfo = { sizeof(CRYPT_REGISTER_ACTIONID),
- SoftpubInitialization,
- SoftpubMessage,
- SoftpubSignature,
- GenericChainCertificateTrust,
- SoftpubCertCheck,
- GenericChainFinalProv,
- { 0, NULL, NULL }, /* No diagnostic policy */
- SoftpubCleanup };
+ CRYPT_REGISTER_ACTIONID ProvInfo;
+
+ ProvInfo.cbStruct = sizeof(CRYPT_REGISTER_ACTIONID);
+ ProvInfo.sInitProvider = SoftpubInitialization;
+ ProvInfo.sObjectProvider = SoftpubMessage;
+ ProvInfo.sSignatureProvider = SoftpubSignature;
+ ProvInfo.sCertificateProvider = GenericChainCertificateTrust;
+ ProvInfo.sCertificatePolicyProvider = SoftpubCertCheck;
+ ProvInfo.sFinalPolicyProvider = GenericChainFinalProv;
+ ProvInfo.sTestPolicyProvider = NullCTRE; /* No diagnostic policy */
+ ProvInfo.sCleanupProvider = SoftpubCleanup;
if (!WintrustAddActionID(&ProvGUID, 0, &ProvInfo))
return FALSE;
More information about the wine-patches
mailing list