check ReadCallback before using it
authorWoo Xie <woo@fb.com>
Tue, 30 Jun 2015 16:21:08 +0000 (09:21 -0700)
committerSara Golemon <sgolemon@fb.com>
Wed, 1 Jul 2015 23:24:50 +0000 (16:24 -0700)
Summary: before the first setReadCallback(), the readCallback_ is nullptr.  Thanks @siyengar for pointing out this!

Reviewed By: @siyengar

Differential Revision: D2203489

folly/io/async/AsyncSSLSocket.cpp
folly/io/async/AsyncSSLSocket.h

index 9c59cce72272aa02b862821c465e99362d89f269..e3df3950007603e237f7db3c0ef945538dc739bd 100644 (file)
@@ -1073,7 +1073,7 @@ AsyncSSLSocket::handleConnect() noexcept {
 void AsyncSSLSocket::setReadCB(ReadCallback *callback) {
 #ifdef SSL_MODE_MOVE_BUFFER_OWNERSHIP
   // turn on the buffer movable in openssl
 void AsyncSSLSocket::setReadCB(ReadCallback *callback) {
 #ifdef SSL_MODE_MOVE_BUFFER_OWNERSHIP
   // turn on the buffer movable in openssl
-  if (!isBufferMovable_ && readCallback_->isBufferMovable()) {
+  if (!isBufferMovable_ && callback != nullptr && callback->isBufferMovable()) {
     SSL_set_mode(ssl_, SSL_get_mode(ssl_) | SSL_MODE_MOVE_BUFFER_OWNERSHIP);
     isBufferMovable_ = true;
   }
     SSL_set_mode(ssl_, SSL_get_mode(ssl_) | SSL_MODE_MOVE_BUFFER_OWNERSHIP);
     isBufferMovable_ = true;
   }
index 2cae50a44a791725c6b3681855527a7edf84c186..fe72e8f902ca5fba600ade7f9e37a2051abc096e 100644 (file)
@@ -656,6 +656,8 @@ class AsyncSSLSocket : public virtual AsyncSocket {
     return minWriteSize_;
   }
 
     return minWriteSize_;
   }
 
+  void setReadCB(ReadCallback* callback) override;
+
  private:
 
   void init();
  private:
 
   void init();
@@ -673,7 +675,6 @@ class AsyncSSLSocket : public virtual AsyncSocket {
 
   // Inherit event notification methods from AsyncSocket except
   // the following.
 
   // Inherit event notification methods from AsyncSocket except
   // the following.
-  void setReadCB(ReadCallback* callback) override;
   void prepareReadBuffer(void** buf, size_t* buflen) noexcept override;
   void handleRead() noexcept override;
   void handleWrite() noexcept override;
   void prepareReadBuffer(void** buf, size_t* buflen) noexcept override;
   void handleRead() noexcept override;
   void handleWrite() noexcept override;