diff options
author | pneubeck@chromium.org <pneubeck@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-18 13:00:14 +0000 |
---|---|---|
committer | pneubeck@chromium.org <pneubeck@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-18 13:00:14 +0000 |
commit | d4a30484a00e5223ba26bfd5e96c9c8c1f50eb16 (patch) | |
tree | d37a97339d45494bc7e24bf896c63d06b2cf2fdc /chromeos | |
parent | a0d53eb18ac2c87659c82ac408f57cdcc7ea47ae (diff) | |
download | chromium_src-d4a30484a00e5223ba26bfd5e96c9c8c1f50eb16.zip chromium_src-d4a30484a00e5223ba26bfd5e96c9c8c1f50eb16.tar.gz chromium_src-d4a30484a00e5223ba26bfd5e96c9c8c1f50eb16.tar.bz2 |
ClientCertResolver: correctly handle a missing issuer cert.
CERT_FindCertIssuer might return NULL, which was not correctly handled before.
It's not clear if this case can ever occur in practice, but with this change we're on the safe side.
BUG=291358
R=joaodasilva@chromium.org
Review URL: https://codereview.chromium.org/23619075
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@223858 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chromeos')
-rw-r--r-- | chromeos/network/client_cert_resolver.cc | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/chromeos/network/client_cert_resolver.cc b/chromeos/network/client_cert_resolver.cc index fcda9ba..998f75a 100644 --- a/chromeos/network/client_cert_resolver.cc +++ b/chromeos/network/client_cert_resolver.cc @@ -143,13 +143,18 @@ void FindCertificateMatches(const net::CertificateList& certs, !HasPrivateKey(cert)) { continue; } + net::X509Certificate::OSCertHandle issuer_handle = + CERT_FindCertIssuer(cert.os_cert_handle(), PR_Now(), certUsageAnyCA); + if (!issuer_handle) { + LOG(ERROR) << "Couldn't find an issuer."; + continue; + } scoped_refptr<net::X509Certificate> issuer = net::X509Certificate::CreateFromHandle( - CERT_FindCertIssuer( - cert.os_cert_handle(), PR_Now(), certUsageAnyCA), - net::X509Certificate::OSCertHandles()); + issuer_handle, + net::X509Certificate::OSCertHandles() /* no intermediate certs */); if (!issuer) { - LOG(ERROR) << "Couldn't find cert issuer."; + LOG(ERROR) << "Couldn't create issuer cert."; continue; } std::string pem_encoded_issuer; |