From d89b69aadeb9db67b7cc2de3300109d866c2a937 Mon Sep 17 00:00:00 2001 From: "henrike@webrtc.org" Date: Thu, 6 Nov 2014 17:23:09 +0000 Subject: [PATCH] Fix WebRTC Win64 + BoringSSL build. There were many size_t to int conversions. RAND_poll and RAND_seed no longer do anything in BoringSSL, so fix that one by removing it. Use a checked_cast for the remaining ones. BUG=chromium:429039 R=henrike@webrtc.org Review URL: https://webrtc-codereview.appspot.com/28909004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7655 4adac7df-926f-26a2-2b94-8c16560cd09d --- webrtc/base/helpers.cc | 25 +++---------------------- webrtc/base/openssladapter.cc | 10 ++++++---- webrtc/base/opensslstreamadapter.cc | 11 ++++++----- webrtc/base/safe_conversions_impl.h | 2 ++ 4 files changed, 17 insertions(+), 31 deletions(-) diff --git a/webrtc/base/helpers.cc b/webrtc/base/helpers.cc index 8b14cdfd6b..84d1c93b37 100644 --- a/webrtc/base/helpers.cc +++ b/webrtc/base/helpers.cc @@ -47,36 +47,17 @@ class RandomGenerator { }; #if defined(SSL_USE_OPENSSL) -// The OpenSSL RNG. Need to make sure it doesn't run out of entropy. +// The OpenSSL RNG. class SecureRandomGenerator : public RandomGenerator { public: - SecureRandomGenerator() : inited_(false) { - } - ~SecureRandomGenerator() { - } + SecureRandomGenerator() {} + ~SecureRandomGenerator() {} virtual bool Init(const void* seed, size_t len) { - // By default, seed from the system state. - if (!inited_) { - if (RAND_poll() <= 0) { - return false; - } - inited_ = true; - } - // Allow app data to be mixed in, if provided. - if (seed) { - RAND_seed(seed, len); - } return true; } virtual bool Generate(void* buf, size_t len) { - if (!inited_ && !Init(NULL, 0)) { - return false; - } return (RAND_bytes(reinterpret_cast(buf), len) > 0); } - - private: - bool inited_; }; #elif defined(SSL_USE_NSS_RNG) diff --git a/webrtc/base/openssladapter.cc b/webrtc/base/openssladapter.cc index 68a1fcb18e..feb01d36df 100644 --- a/webrtc/base/openssladapter.cc +++ b/webrtc/base/openssladapter.cc @@ -34,6 +34,7 @@ #include "webrtc/base/common.h" #include "webrtc/base/logging.h" #include "webrtc/base/openssl.h" +#include "webrtc/base/safe_conversions.h" #include "webrtc/base/sslroots.h" #include "webrtc/base/stringutils.h" @@ -141,7 +142,7 @@ static int socket_write(BIO* b, const char* in, int inl) { } static int socket_puts(BIO* b, const char* str) { - return socket_write(b, str, strlen(str)); + return socket_write(b, str, rtc::checked_cast(strlen(str))); } static long socket_ctrl(BIO* b, int cmd, long num, void* ptr) { @@ -448,7 +449,7 @@ OpenSSLAdapter::Send(const void* pv, size_t cb) { ssl_write_needs_read_ = false; - int code = SSL_write(ssl_, pv, cb); + int code = SSL_write(ssl_, pv, checked_cast(cb)); switch (SSL_get_error(ssl_, code)) { case SSL_ERROR_NONE: //LOG(LS_INFO) << " -- success"; @@ -503,7 +504,7 @@ OpenSSLAdapter::Recv(void* pv, size_t cb) { ssl_read_needs_write_ = false; - int code = SSL_read(ssl_, pv, cb); + int code = SSL_read(ssl_, pv, checked_cast(cb)); switch (SSL_get_error(ssl_, code)) { case SSL_ERROR_NONE: //LOG(LS_INFO) << " -- success"; @@ -843,7 +844,8 @@ bool OpenSSLAdapter::ConfigureTrustedRootCertificates(SSL_CTX* ctx) { for (int i = 0; i < ARRAY_SIZE(kSSLCertCertificateList); i++) { const unsigned char* cert_buffer = kSSLCertCertificateList[i]; size_t cert_buffer_len = kSSLCertCertificateSizeList[i]; - X509* cert = d2i_X509(NULL, &cert_buffer, cert_buffer_len); + X509* cert = d2i_X509(NULL, &cert_buffer, + checked_cast(cert_buffer_len)); if (cert) { int return_value = X509_STORE_add_cert(SSL_CTX_get_cert_store(ctx), cert); if (return_value == 0) { diff --git a/webrtc/base/opensslstreamadapter.cc b/webrtc/base/opensslstreamadapter.cc index 133eb72b4c..d790e4e881 100644 --- a/webrtc/base/opensslstreamadapter.cc +++ b/webrtc/base/opensslstreamadapter.cc @@ -26,6 +26,7 @@ #include "webrtc/base/common.h" #include "webrtc/base/logging.h" +#include "webrtc/base/safe_conversions.h" #include "webrtc/base/stream.h" #include "webrtc/base/openssl.h" #include "webrtc/base/openssladapter.h" @@ -114,7 +115,7 @@ static int stream_read(BIO* b, char* out, int outl) { int error; StreamResult result = stream->Read(out, outl, &read, &error); if (result == SR_SUCCESS) { - return read; + return checked_cast(read); } else if (result == SR_EOS) { b->num = 1; } else if (result == SR_BLOCK) { @@ -132,7 +133,7 @@ static int stream_write(BIO* b, const char* in, int inl) { int error; StreamResult result = stream->Write(in, inl, &written, &error); if (result == SR_SUCCESS) { - return written; + return checked_cast(written); } else if (result == SR_BLOCK) { BIO_set_retry_write(b); } @@ -140,7 +141,7 @@ static int stream_write(BIO* b, const char* in, int inl) { } static int stream_puts(BIO* b, const char* str) { - return stream_write(b, str, strlen(str)); + return stream_write(b, str, checked_cast(strlen(str))); } static long stream_ctrl(BIO* b, int cmd, long num, void* ptr) { @@ -364,7 +365,7 @@ StreamResult OpenSSLStreamAdapter::Write(const void* data, size_t data_len, ssl_write_needs_read_ = false; - int code = SSL_write(ssl_, data, data_len); + int code = SSL_write(ssl_, data, checked_cast(data_len)); int ssl_error = SSL_get_error(ssl_, code); switch (ssl_error) { case SSL_ERROR_NONE: @@ -425,7 +426,7 @@ StreamResult OpenSSLStreamAdapter::Read(void* data, size_t data_len, ssl_read_needs_write_ = false; - int code = SSL_read(ssl_, data, data_len); + int code = SSL_read(ssl_, data, checked_cast(data_len)); int ssl_error = SSL_get_error(ssl_, code); switch (ssl_error) { case SSL_ERROR_NONE: diff --git a/webrtc/base/safe_conversions_impl.h b/webrtc/base/safe_conversions_impl.h index 2950f970ce..77b053a812 100644 --- a/webrtc/base/safe_conversions_impl.h +++ b/webrtc/base/safe_conversions_impl.h @@ -15,6 +15,8 @@ #include +#include "webrtc/base/compile_assert.h" + namespace rtc { namespace internal {