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/webrtc@7655 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/base/helpers.cc b/base/helpers.cc
index 8b14cdf..84d1c93 100644
--- a/base/helpers.cc
+++ b/base/helpers.cc
@@ -47,36 +47,17 @@
 };
 
 #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<unsigned char*>(buf), len) > 0);
   }
-
- private:
-  bool inited_;
 };
 
 #elif defined(SSL_USE_NSS_RNG)
diff --git a/base/openssladapter.cc b/base/openssladapter.cc
index 68a1fcb..feb01d3 100644
--- a/base/openssladapter.cc
+++ b/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_puts(BIO* b, const char* str) {
-  return socket_write(b, str, strlen(str));
+  return socket_write(b, str, rtc::checked_cast<int>(strlen(str)));
 }
 
 static long socket_ctrl(BIO* b, int cmd, long num, void* ptr) {
@@ -448,7 +449,7 @@
 
   ssl_write_needs_read_ = false;
 
-  int code = SSL_write(ssl_, pv, cb);
+  int code = SSL_write(ssl_, pv, checked_cast<int>(cb));
   switch (SSL_get_error(ssl_, code)) {
   case SSL_ERROR_NONE:
     //LOG(LS_INFO) << " -- success";
@@ -503,7 +504,7 @@
 
   ssl_read_needs_write_ = false;
 
-  int code = SSL_read(ssl_, pv, cb);
+  int code = SSL_read(ssl_, pv, checked_cast<int>(cb));
   switch (SSL_get_error(ssl_, code)) {
   case SSL_ERROR_NONE:
     //LOG(LS_INFO) << " -- success";
@@ -843,7 +844,8 @@
   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<long>(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/base/opensslstreamadapter.cc b/base/opensslstreamadapter.cc
index 133eb72..d790e4e 100644
--- a/base/opensslstreamadapter.cc
+++ b/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 @@
   int error;
   StreamResult result = stream->Read(out, outl, &read, &error);
   if (result == SR_SUCCESS) {
-    return read;
+    return checked_cast<int>(read);
   } else if (result == SR_EOS) {
     b->num = 1;
   } else if (result == SR_BLOCK) {
@@ -132,7 +133,7 @@
   int error;
   StreamResult result = stream->Write(in, inl, &written, &error);
   if (result == SR_SUCCESS) {
-    return written;
+    return checked_cast<int>(written);
   } else if (result == SR_BLOCK) {
     BIO_set_retry_write(b);
   }
@@ -140,7 +141,7 @@
 }
 
 static int stream_puts(BIO* b, const char* str) {
-  return stream_write(b, str, strlen(str));
+  return stream_write(b, str, checked_cast<int>(strlen(str)));
 }
 
 static long stream_ctrl(BIO* b, int cmd, long num, void* ptr) {
@@ -364,7 +365,7 @@
 
   ssl_write_needs_read_ = false;
 
-  int code = SSL_write(ssl_, data, data_len);
+  int code = SSL_write(ssl_, data, checked_cast<int>(data_len));
   int ssl_error = SSL_get_error(ssl_, code);
   switch (ssl_error) {
   case SSL_ERROR_NONE:
@@ -425,7 +426,7 @@
 
   ssl_read_needs_write_ = false;
 
-  int code = SSL_read(ssl_, data, data_len);
+  int code = SSL_read(ssl_, data, checked_cast<int>(data_len));
   int ssl_error = SSL_get_error(ssl_, code);
   switch (ssl_error) {
     case SSL_ERROR_NONE:
diff --git a/base/safe_conversions_impl.h b/base/safe_conversions_impl.h
index 2950f97..77b053a 100644
--- a/base/safe_conversions_impl.h
+++ b/base/safe_conversions_impl.h
@@ -15,6 +15,8 @@
 
 #include <limits>
 
+#include "webrtc/base/compile_assert.h"
+
 namespace rtc {
 namespace internal {