Fix undefined behaviour
authorAnton Likhtarov <alikhtarov@fb.com>
Wed, 15 Feb 2017 01:35:35 +0000 (17:35 -0800)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Wed, 15 Feb 2017 01:55:05 +0000 (17:55 -0800)
Summary: memcpy's src cannot be nullptr even if the size is 0.

Reviewed By: djwatson

Differential Revision: D4560100

fbshipit-source-id: 37cd3ed73f902a136f711a5c1a918258f94d1063

folly/io/async/AsyncSSLSocket.cpp

index 60f297c2abce88f9782be4e0e63670845dc6be6e..074d1ac3c984d0f6d5704fdf20b20aaf8f55dc9a 100644 (file)
@@ -1463,8 +1463,13 @@ AsyncSocket::WriteResult AsyncSSLSocket::performWrite(
         uint32_t nextIndex = i + buffersStolen + 1;
         bytesStolenFromNextBuffer = std::min(vec[nextIndex].iov_len,
                                              minWriteSize_ - len);
-        memcpy(combinedBuf + len, vec[nextIndex].iov_base,
-               bytesStolenFromNextBuffer);
+        if (bytesStolenFromNextBuffer > 0) {
+          assert(vec[nextIndex].iov_base != nullptr);
+          ::memcpy(
+              combinedBuf + len,
+              vec[nextIndex].iov_base,
+              bytesStolenFromNextBuffer);
+        }
         len += bytesStolenFromNextBuffer;
         if (bytesStolenFromNextBuffer < vec[nextIndex].iov_len) {
           // couldn't steal the whole buffer