Fix segfaults in AsyncSSLSocket when used in unencrypted mode.
authorKyle Nekritz <knekritz@fb.com>
Mon, 7 Dec 2015 19:04:13 +0000 (11:04 -0800)
committerfacebook-github-bot-1 <folly-bot@fb.com>
Mon, 7 Dec 2015 20:20:22 +0000 (12:20 -0800)
Reviewed By: djwatson

Differential Revision: D2720027

fb-gh-sync-id: 1d56aabedeaf65a5d48e152eaee5c81695be7620

folly/io/async/AsyncSSLSocket.cpp

index 8874235d5c304a33e96fa3a1c7febaece38517ae..166a403950845bbfde57f9b20c2ac208ce6ef969 100644 (file)
@@ -412,6 +412,9 @@ std::string AsyncSSLSocket::getApplicationProtocol() noexcept {
 }
 
 bool AsyncSSLSocket::isEorTrackingEnabled() const {
+  if (ssl_ == nullptr) {
+    return false;
+  }
   const BIO *wb = SSL_get_wbio(ssl_);
   return wb && wb->method == &eorAwareBioMethod;
 }
@@ -1094,7 +1097,8 @@ AsyncSSLSocket::handleConnect() noexcept {
 void AsyncSSLSocket::setReadCB(ReadCallback *callback) {
 #ifdef SSL_MODE_MOVE_BUFFER_OWNERSHIP
   // turn on the buffer movable in openssl
-  if (!isBufferMovable_ && callback != nullptr && callback->isBufferMovable()) {
+  if (ssl_ != nullptr && !isBufferMovable_ &&
+      callback != nullptr && callback->isBufferMovable()) {
     SSL_set_mode(ssl_, SSL_get_mode(ssl_) | SSL_MODE_MOVE_BUFFER_OWNERSHIP);
     isBufferMovable_ = true;
   }