| 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 9269c0c15d0356292fecb9bc3bba4d838c3c44da..9141a5b57724334cd04286807db7c4db71d8704d 100644
|
| --- a/net/socket/ssl_client_socket_openssl.cc
|
| +++ b/net/socket/ssl_client_socket_openssl.cc
|
| @@ -590,7 +590,7 @@ int SSLClientSocketOpenSSL::ClientCertRequestCallback(SSL* ssl,
|
| }
|
|
|
| // Second pass: a client certificate should have been selected.
|
| - if (ssl_config_.client_cert) {
|
| + if (ssl_config_.client_cert.get()) {
|
| // A note about ownership: FetchClientCertPrivateKey() increments
|
| // the reference count of the EVP_PKEY. Ownership of this reference
|
| // is passed directly to OpenSSL, which will release the reference
|
| @@ -616,7 +616,7 @@ int SSLClientSocketOpenSSL::ClientCertRequestCallback(SSL* ssl,
|
|
|
| bool SSLClientSocketOpenSSL::GetSSLInfo(SSLInfo* ssl_info) {
|
| ssl_info->Reset();
|
| - if (!server_cert_)
|
| + if (!server_cert_.get())
|
| return false;
|
|
|
| ssl_info->cert = server_cert_verify_result_.verified_cert;
|
| @@ -626,7 +626,7 @@ bool SSLClientSocketOpenSSL::GetSSLInfo(SSLInfo* ssl_info) {
|
| ssl_info->public_key_hashes =
|
| server_cert_verify_result_.public_key_hashes;
|
| ssl_info->client_cert_sent =
|
| - ssl_config_.send_client_cert && ssl_config_.client_cert;
|
| + ssl_config_.send_client_cert && ssl_config_.client_cert.get();
|
| ssl_info->channel_id_sent = WasChannelIDSent();
|
|
|
| const SSL_CIPHER* cipher = SSL_get_current_cipher(ssl_);
|
| @@ -927,11 +927,11 @@ int SSLClientSocketOpenSSL::SelectNextProtoCallback(unsigned char** out,
|
| }
|
|
|
| int SSLClientSocketOpenSSL::DoVerifyCert(int result) {
|
| - DCHECK(server_cert_);
|
| + DCHECK(server_cert_.get());
|
| GotoState(STATE_VERIFY_CERT_COMPLETE);
|
|
|
| CertStatus cert_status;
|
| - if (ssl_config_.IsAllowedBadCert(server_cert_, &cert_status)) {
|
| + if (ssl_config_.IsAllowedBadCert(server_cert_.get(), &cert_status)) {
|
| VLOG(1) << "Received an expected bad cert with status: " << cert_status;
|
| server_cert_verify_result_.Reset();
|
| server_cert_verify_result_.cert_status = cert_status;
|
| @@ -948,7 +948,9 @@ int SSLClientSocketOpenSSL::DoVerifyCert(int result) {
|
| flags |= CertVerifier::VERIFY_CERT_IO_ENABLED;
|
| verifier_.reset(new SingleRequestCertVerifier(cert_verifier_));
|
| return verifier_->Verify(
|
| - server_cert_, host_and_port_.host(), flags,
|
| + server_cert_.get(),
|
| + host_and_port_.host(),
|
| + flags,
|
| NULL /* no CRL set */,
|
| &server_cert_verify_result_,
|
| base::Bind(&SSLClientSocketOpenSSL::OnHandshakeIOComplete,
|
| @@ -974,8 +976,8 @@ int SSLClientSocketOpenSSL::DoVerifyCertComplete(int result) {
|
| }
|
|
|
| X509Certificate* SSLClientSocketOpenSSL::UpdateServerCert() {
|
| - if (server_cert_)
|
| - return server_cert_;
|
| + if (server_cert_.get())
|
| + return server_cert_.get();
|
|
|
| crypto::ScopedOpenSSL<X509, X509_free> cert(SSL_get_peer_certificate(ssl_));
|
| if (!cert.get()) {
|
| @@ -992,9 +994,9 @@ X509Certificate* SSLClientSocketOpenSSL::UpdateServerCert() {
|
| intermediates.push_back(sk_X509_value(chain, i));
|
| }
|
| server_cert_ = X509Certificate::CreateFromHandle(cert.get(), intermediates);
|
| - DCHECK(server_cert_);
|
| + DCHECK(server_cert_.get());
|
|
|
| - return server_cert_;
|
| + return server_cert_.get();
|
| }
|
|
|
| bool SSLClientSocketOpenSSL::DoTransportIO() {
|
| @@ -1016,7 +1018,7 @@ int SSLClientSocketOpenSSL::BufferSend(void) {
|
| if (transport_send_busy_)
|
| return ERR_IO_PENDING;
|
|
|
| - if (!send_buffer_) {
|
| + if (!send_buffer_.get()) {
|
| // Get a fresh send buffer out of the send BIO.
|
| size_t max_read = BIO_ctrl_pending(transport_bio_);
|
| if (!max_read)
|
| @@ -1028,10 +1030,10 @@ int SSLClientSocketOpenSSL::BufferSend(void) {
|
| }
|
|
|
| int rv = transport_->socket()->Write(
|
| - send_buffer_,
|
| - send_buffer_->BytesRemaining(),
|
| - base::Bind(&SSLClientSocketOpenSSL::BufferSendComplete,
|
| - base::Unretained(this)));
|
| + send_buffer_.get(),
|
| + send_buffer_->BytesRemaining(),
|
| + base::Bind(&SSLClientSocketOpenSSL::BufferSendComplete,
|
| + base::Unretained(this)));
|
| if (rv == ERR_IO_PENDING) {
|
| transport_send_busy_ = true;
|
| } else {
|
| @@ -1055,7 +1057,7 @@ void SSLClientSocketOpenSSL::TransportWriteComplete(int result) {
|
| BIO_set_mem_eof_return(transport_bio_, 0);
|
| send_buffer_ = NULL;
|
| } else {
|
| - DCHECK(send_buffer_);
|
| + DCHECK(send_buffer_.get());
|
| send_buffer_->DidConsume(result);
|
| DCHECK_GE(send_buffer_->BytesRemaining(), 0);
|
| if (send_buffer_->BytesRemaining() <= 0)
|
| @@ -1091,7 +1093,8 @@ int SSLClientSocketOpenSSL::BufferRecv(void) {
|
|
|
| recv_buffer_ = new IOBuffer(max_write);
|
| int rv = transport_->socket()->Read(
|
| - recv_buffer_, max_write,
|
| + recv_buffer_.get(),
|
| + max_write,
|
| base::Bind(&SSLClientSocketOpenSSL::BufferRecvComplete,
|
| base::Unretained(this)));
|
| if (rv == ERR_IO_PENDING) {
|
| @@ -1119,7 +1122,7 @@ void SSLClientSocketOpenSSL::TransportReadComplete(int result) {
|
| BIO_set_mem_eof_return(transport_bio_, 0);
|
| (void)BIO_shutdown_wr(transport_bio_);
|
| } else {
|
| - DCHECK(recv_buffer_);
|
| + DCHECK(recv_buffer_.get());
|
| int ret = BIO_write(transport_bio_, recv_buffer_->data(), result);
|
| // A write into a memory BIO should always succeed.
|
| CHECK_EQ(result, ret);
|
| @@ -1157,28 +1160,26 @@ void SSLClientSocketOpenSSL::OnSendComplete(int result) {
|
| int rv_write = ERR_IO_PENDING;
|
| bool network_moved;
|
| do {
|
| - if (user_read_buf_)
|
| - rv_read = DoPayloadRead();
|
| - if (user_write_buf_)
|
| - rv_write = DoPayloadWrite();
|
| - network_moved = DoTransportIO();
|
| - } while (rv_read == ERR_IO_PENDING &&
|
| - rv_write == ERR_IO_PENDING &&
|
| - (user_read_buf_ || user_write_buf_) &&
|
| - network_moved);
|
| + if (user_read_buf_.get())
|
| + rv_read = DoPayloadRead();
|
| + if (user_write_buf_.get())
|
| + rv_write = DoPayloadWrite();
|
| + network_moved = DoTransportIO();
|
| + } while (rv_read == ERR_IO_PENDING && rv_write == ERR_IO_PENDING &&
|
| + (user_read_buf_.get() || user_write_buf_.get()) && network_moved);
|
|
|
| // Performing the Read callback may cause |this| to be deleted. If this
|
| // happens, the Write callback should not be invoked. Guard against this by
|
| // holding a WeakPtr to |this| and ensuring it's still valid.
|
| base::WeakPtr<SSLClientSocketOpenSSL> guard(weak_factory_.GetWeakPtr());
|
| - if (user_read_buf_ && rv_read != ERR_IO_PENDING)
|
| - DoReadCallback(rv_read);
|
| + if (user_read_buf_.get() && rv_read != ERR_IO_PENDING)
|
| + DoReadCallback(rv_read);
|
|
|
| if (!guard.get())
|
| return;
|
|
|
| - if (user_write_buf_ && rv_write != ERR_IO_PENDING)
|
| - DoWriteCallback(rv_write);
|
| + if (user_write_buf_.get() && rv_write != ERR_IO_PENDING)
|
| + DoWriteCallback(rv_write);
|
| }
|
|
|
| void SSLClientSocketOpenSSL::OnRecvComplete(int result) {
|
| @@ -1190,7 +1191,7 @@ void SSLClientSocketOpenSSL::OnRecvComplete(int result) {
|
|
|
| // Network layer received some data, check if client requested to read
|
| // decrypted data.
|
| - if (!user_read_buf_)
|
| + if (!user_read_buf_.get())
|
| return;
|
|
|
| int rv = DoReadLoop(result);
|
| @@ -1203,7 +1204,7 @@ bool SSLClientSocketOpenSSL::IsConnected() const {
|
| if (!completed_handshake_)
|
| return false;
|
| // If an asynchronous operation is still pending.
|
| - if (user_read_buf_ || user_write_buf_)
|
| + if (user_read_buf_.get() || user_write_buf_.get())
|
| return true;
|
|
|
| return transport_->socket()->IsConnected();
|
| @@ -1214,7 +1215,7 @@ bool SSLClientSocketOpenSSL::IsConnectedAndIdle() const {
|
| if (!completed_handshake_)
|
| return false;
|
| // If an asynchronous operation is still pending.
|
| - if (user_read_buf_ || user_write_buf_)
|
| + if (user_read_buf_.get() || user_write_buf_.get())
|
| return false;
|
| // If there is data waiting to be sent, or data read from the network that
|
| // has not yet been consumed.
|
|
|