crypt32: Test and fix a couple CertAddCertificateContextToStore corner cases.
This commit is contained in:
parent
29a8dd47a8
commit
e1afe33ac7
|
@ -2044,6 +2044,12 @@ BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
|
|||
TRACE("(%p, %p, %08lx, %p)\n", hCertStore, pCertContext,
|
||||
dwAddDisposition, ppStoreContext);
|
||||
|
||||
/* Weird case to pass a test */
|
||||
if (dwAddDisposition == 0)
|
||||
{
|
||||
SetLastError(STATUS_ACCESS_VIOLATION);
|
||||
return FALSE;
|
||||
}
|
||||
if (dwAddDisposition != CERT_STORE_ADD_ALWAYS)
|
||||
{
|
||||
BYTE hashToAdd[20];
|
||||
|
@ -2095,8 +2101,11 @@ BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
|
|||
|
||||
if (toAdd)
|
||||
{
|
||||
ret = store->certs.addContext(store, (void *)toAdd, (void *)existing,
|
||||
(const void **)ppStoreContext);
|
||||
if (store)
|
||||
ret = store->certs.addContext(store, (void *)toAdd,
|
||||
(void *)existing, (const void **)ppStoreContext);
|
||||
else if (ppStoreContext)
|
||||
*ppStoreContext = CertDuplicateCertificateContext(toAdd);
|
||||
CertFreeCertificateContext(toAdd);
|
||||
}
|
||||
CertFreeCertificateContext(existing);
|
||||
|
|
|
@ -152,6 +152,28 @@ static void testAddCert(void)
|
|||
PCCERT_CONTEXT context;
|
||||
BOOL ret;
|
||||
|
||||
/* Weird--bad add disposition leads to an access violation in Windows.
|
||||
*/
|
||||
ret = CertAddEncodedCertificateToStore(0, X509_ASN_ENCODING, bigCert,
|
||||
sizeof(bigCert), 0, NULL);
|
||||
ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
|
||||
"Expected STATUS_ACCESS_VIOLATION, got %08lx\n", GetLastError());
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert, sizeof(bigCert), 0, NULL);
|
||||
ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
|
||||
"Expected STATUS_ACCESS_VIOLATION, got %08lx\n", GetLastError());
|
||||
|
||||
/* Weird--can add a cert to the NULL store (does this have special
|
||||
* meaning?)
|
||||
*/
|
||||
context = NULL;
|
||||
ret = CertAddEncodedCertificateToStore(0, X509_ASN_ENCODING, bigCert,
|
||||
sizeof(bigCert), CERT_STORE_ADD_ALWAYS, &context);
|
||||
ok(ret, "CertAddEncodedCertificateToStore failed: %08lx\n",
|
||||
GetLastError());
|
||||
if (context)
|
||||
CertFreeCertificateContext(context);
|
||||
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
|
||||
ok(ret, "CertAddEncodedCertificateToStore failed: %08lx\n",
|
||||
|
|
Loading…
Reference in New Issue