Index: net/socket/ssl_client_socket_openssl.cc |
diff --git a/net/socket/ssl_client_socket_openssl.cc b/net/socket/ssl_client_socket_openssl.cc |
index 89cb40592952b387939d39c8ea21938f96c2bd2f..ed1138f50dd4e08c89fe76ff7a38a29328f6e24a 100644 |
--- a/net/socket/ssl_client_socket_openssl.cc |
+++ b/net/socket/ssl_client_socket_openssl.cc |
@@ -244,12 +244,8 @@ SSLClientSocketOpenSSL::PeerCertificateChain::operator=( |
// os_chain_ is reference counted by scoped_refptr; |
os_chain_ = other.os_chain_; |
- // Must increase the reference count manually for sk_X509_dup |
- openssl_chain_.reset(sk_X509_dup(other.openssl_chain_.get())); |
- for (size_t i = 0; i < sk_X509_num(openssl_chain_.get()); ++i) { |
- X509* x = sk_X509_value(openssl_chain_.get(), i); |
- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); |
- } |
+ openssl_chain_.reset(X509_chain_up_ref(other.openssl_chain_.get())); |
+ |
return *this; |
} |
@@ -271,15 +267,7 @@ void SSLClientSocketOpenSSL::PeerCertificateChain::Reset( |
os_chain_ = |
X509Certificate::CreateFromHandle(sk_X509_value(chain, 0), intermediates); |
- // sk_X509_dup does not increase reference count on the certs in the stack. |
- openssl_chain_.reset(sk_X509_dup(chain)); |
- |
- std::vector<base::StringPiece> der_chain; |
- for (size_t i = 0; i < sk_X509_num(openssl_chain_.get()); ++i) { |
- X509* x = sk_X509_value(openssl_chain_.get(), i); |
- // Increase the reference count for the certs in openssl_chain_. |
- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); |
- } |
+ openssl_chain_.reset(X509_chain_up_ref(chain)); |
} |
#else // !defined(USE_OPENSSL_CERTS) |
void SSLClientSocketOpenSSL::PeerCertificateChain::Reset( |
@@ -290,16 +278,12 @@ void SSLClientSocketOpenSSL::PeerCertificateChain::Reset( |
if (!chain) |
return; |
- // sk_X509_dup does not increase reference count on the certs in the stack. |
- openssl_chain_.reset(sk_X509_dup(chain)); |
+ openssl_chain_.reset(X509_chain_up_ref(chain)); |
std::vector<base::StringPiece> der_chain; |
for (size_t i = 0; i < sk_X509_num(openssl_chain_.get()); ++i) { |
X509* x = sk_X509_value(openssl_chain_.get(), i); |
- // Increase the reference count for the certs in openssl_chain_. |
- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); |
- |
unsigned char* cert_data = NULL; |
int cert_data_length = i2d_X509(x, &cert_data); |
if (cert_data_length && cert_data) |