crypt32: Test and fix a couple CertAddCertificateContextToStore corner cases.

This commit is contained in:
Juan Lang 2006-05-23 21:56:00 -07:00 committed by Alexandre Julliard
parent 29a8dd47a8
commit e1afe33ac7
2 changed files with 33 additions and 2 deletions

View file

@ -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);

View file

@ -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",