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