crypt32: Validate add disposition before checking source certificate's properties.
diff --git a/dlls/crypt32/store.c b/dlls/crypt32/store.c
index a892394..da3de56 100644
--- a/dlls/crypt32/store.c
+++ b/dlls/crypt32/store.c
@@ -855,7 +855,16 @@
TRACE("(%p, %p, %08x, %p)\n", hCertStore, pCertContext,
dwAddDisposition, ppStoreContext);
- if (dwAddDisposition != CERT_STORE_ADD_ALWAYS)
+ switch (dwAddDisposition)
+ {
+ case CERT_STORE_ADD_ALWAYS:
+ break;
+ case CERT_STORE_ADD_NEW:
+ case CERT_STORE_ADD_REPLACE_EXISTING:
+ case CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES:
+ case CERT_STORE_ADD_USE_EXISTING:
+ case CERT_STORE_ADD_NEWER:
+ case CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES:
{
BYTE hashToAdd[20];
DWORD size = sizeof(hashToAdd);
@@ -870,6 +879,12 @@
pCertContext->dwCertEncodingType, 0, CERT_FIND_SHA1_HASH, &blob,
NULL);
}
+ break;
+ }
+ default:
+ FIXME("Unimplemented add disposition %d\n", dwAddDisposition);
+ SetLastError(E_INVALIDARG);
+ ret = FALSE;
}
switch (dwAddDisposition)
@@ -940,10 +955,6 @@
else
toAdd = CertDuplicateCertificateContext(pCertContext);
break;
- default:
- FIXME("Unimplemented add disposition %d\n", dwAddDisposition);
- SetLastError(E_INVALIDARG);
- ret = FALSE;
}
if (toAdd)