| Index: net/base/x509_certificate.cc
|
| diff --git a/net/base/x509_certificate.cc b/net/base/x509_certificate.cc
|
| index 5ac75b36b476280b7ba17d2f11743189fe391285..9d36b50c73e3f17fd617dabe2334a2d75d215daa 100644
|
| --- a/net/base/x509_certificate.cc
|
| +++ b/net/base/x509_certificate.cc
|
| @@ -262,14 +262,22 @@ X509Certificate* X509Certificate::CreateFromDERCertChain(
|
| X509Certificate::OSCertHandles intermediate_ca_certs;
|
| for (size_t i = 1; i < der_certs.size(); i++) {
|
| OSCertHandle handle = CreateOSCert(der_certs[i]);
|
| - DCHECK(handle);
|
| + if (!handle)
|
| + break;
|
| intermediate_ca_certs.push_back(handle);
|
| }
|
|
|
| - OSCertHandle handle = CreateOSCert(der_certs[0]);
|
| - DCHECK(handle);
|
| - X509Certificate* cert = CreateFromHandle(handle, intermediate_ca_certs);
|
| - FreeOSCertHandle(handle);
|
| + OSCertHandle handle = NULL;
|
| + // Return NULL if we failed to parse any of the certs.
|
| + if (der_certs.size() - 1 == intermediate_ca_certs.size())
|
| + handle = CreateOSCert(der_certs[0]);
|
| +
|
| + X509Certificate* cert = NULL;
|
| + if (handle) {
|
| + cert = CreateFromHandle(handle, intermediate_ca_certs);
|
| + FreeOSCertHandle(handle);
|
| + }
|
| +
|
| for (size_t i = 0; i < intermediate_ca_certs.size(); i++)
|
| FreeOSCertHandle(intermediate_ca_certs[i]);
|
|
|
|
|