facebook / wdt

Warp speed Data Transfer (WDT) is an embeddedable library (and command line tool) aiming to transfer data between 2 systems as fast as possible over multiple TCP paths.
https://www.facebook.com/WdtOpenSource
Other
2.86k stars 391 forks source link

integer overflow - aka can't use more than 2G internal buffers any time soon #94

Open uddipta opened 8 years ago

uddipta commented 8 years ago

int SocketUtils::getReceiveBufferSize(int fd); ClientSocket.cpp:int ClientSocket::read(char buf, int nbyte, bool tryFull) { ClientSocket.cpp:int ClientSocket::write(const char buf, int nbyte, bool tryFull) { ServerSocket.cpp:int ServerSocket::read(char buf, int nbyte, bool tryFull) { ServerSocket.cpp:int ServerSocket::write(const char buf, int nbyte, bool tryFull) { Receiver.cpp: int written = socket.write(buf, checkpointLen);

ldemailly commented 8 years ago

some more:

/Users/ldemailly/github/wdt/ClientSocket.cpp:179:10: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
  return SocketUtils::readWithAbortCheck(fd_, buf, nbyte, abortChecker_,
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/ldemailly/github/wdt/ClientSocket.cpp:184:10: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
  return SocketUtils::writeWithAbortCheck(fd_, buf, nbyte, abortChecker_,
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /Users/ldemailly/github/wdt/ClientSocket.cpp:10:
/Users/ldemailly/github/wdt/Reporting.h:42:10: warning: implicit conversion loses integer precision: 'rep' (aka 'long long') to 'int' [-Wshorten-64-to-32]
  return std::chrono::duration_cast<std::chrono::milliseconds>(d).count();
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/ldemailly/github/wdt/ClientSocket.cpp:100:27: note: in instantiation of function template specialization 'facebook::wdt::durationMillis<std::__1::chrono::duration<long long, std::__1::ratio<1, 1000000000> > >' requested here
        int timeElapsed = durationMillis(Clock::now() - startTime);
                          ^

/Users/ldemailly/github/wdt/Protocol.cpp:200:25: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int32_t' (aka 'int') [-Wshorten-64-to-32]
      checkpoint.port = decodeInt(br);
                      ~ ^~~~~~~~~~~~~
/Users/ldemailly/github/wdt/Protocol.cpp:439:29: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
    senderProtocolVersion = decodeInt(br);
                          ~ ^~~~~~~~~~~~~
/Users/ldemailly/github/wdt/Protocol.cpp:453:34: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
    settings.readTimeoutMillis = decodeInt(br);
                               ~ ^~~~~~~~~~~~~
/Users/ldemailly/github/wdt/Protocol.cpp:454:35: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
    settings.writeTimeoutMillis = decodeInt(br);
                                ~ ^~~~~~~~~~~~~
/Users/ldemailly/github/wdt/Protocol.cpp:483:16: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int32_t' (aka 'int') [-Wshorten-64-to-32]
    checksum = decodeInt(br);
             ~ ^~~~~~~~~~~~~

# copy pasta client vs server socket

/Users/ldemailly/github/wdt/ServerSocket.cpp:234:22: warning: implicit conversion loses integer precision: 'size_type' (aka 'unsigned long') to 'const int' [-Wshorten-64-to-32]
  const int numFds = listeningFds_.size();
            ~~~~~~   ^~~~~~~~~~~~~~~~~~~~
/Users/ldemailly/github/wdt/ServerSocket.cpp:313:10: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
  return SocketUtils::readWithAbortCheck(fd_, buf, nbyte, abortChecker_,
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/ldemailly/github/wdt/ServerSocket.cpp:318:10: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
  return SocketUtils::writeWithAbortCheck(fd_, buf, nbyte, abortChecker_,
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /Users/ldemailly/github/wdt/ServerSocket.cpp:10:
/Users/ldemailly/github/wdt/Reporting.h:42:10: warning: implicit conversion loses integer precision: 'rep' (aka 'long long') to 'int' [-Wshorten-64-to-32]
  return std::chrono::duration_cast<std::chrono::milliseconds>(d).count();
  ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/ldemailly/github/wdt/ServerSocket.cpp:242:23: note: in instantiation of function template specialization 'facebook::wdt::durationMillis<std::__1::chrono::duration<long long, std::__1::ratio<1, 1000000000> > >' requested here
    int timeElapsed = durationMillis(Clock::now() - startTime);
                      ^
/Users/ldemailly/github/wdt/Receiver.cpp:53:39: warning: implicit conversion loses integer precision: 'long long' to 'int' [-Wshorten-64-to-32]
    int64_t n = s.read(buf + len, max - len, false);
                ~                 ~~~~^~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:80:27: warning: implicit conversion loses integer precision: 'const int64_t' (aka 'const long long') to 'int' [-Wshorten-64-to-32]
  int64_t n = s.read(buf, target, false);
              ~           ^~~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:1170:37: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        written = socket.write(buf, toWrite);
                  ~~~~~~            ^~~~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:1183:37: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        written = socket.write(buf, toWrite);
                  ~~~~~~            ^~~~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:1191:47: warning: implicit conversion loses integer precision: 'long long' to 'int' [-Wshorten-64-to-32]
        int timeoutMillis = senderReadTimeout / kWaitTimeoutFactor;
            ~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:1210:37: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        written = socket.write(buf, off);
                  ~~~~~~            ^~~
/Users/ldemailly/github/wdt/Receiver.cpp:1228:30: warning: implicit conversion loses integer precision: 'unsigned long long' to 'int32_t' (aka 'int') [-Wshorten-64-to-32]
          int32_t dataSize = folly::Endian::little(off - sizeof(int32_t));
                  ~~~~~~~~   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:1230:39: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
          written = socket.write(buf, off);
                    ~~~~~~            ^~~
/Users/ldemailly/github/wdt/Receiver.cpp:1247:44: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
        int64_t numRead = socket.read(buf, toRead);
                          ~~~~~~           ^~~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:1340:36: warning: implicit conversion loses integer precision: 'long long' to 'int' [-Wshorten-64-to-32]
  auto written = socket.write(buf, off);
                 ~~~~~~            ^~~
/Users/ldemailly/github/wdt/Receiver.cpp:1347:46: warning: implicit conversion loses integer precision: 'unsigned long' to 'int' [-Wshorten-64-to-32]
    pendingCheckpointIndex = checkpointIndex + newCheckpoints.size();
                           ~ ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:1363:21: warning: implicit conversion loses integer precision: 'int64_t' (aka 'long long') to 'int' [-Wshorten-64-to-32]
  socket.write(buf, offset);
  ~~~~~~            ^~~~~~
/Users/ldemailly/github/wdt/Receiver.cpp:1469:43: warning: implicit conversion loses integer precision: 'long long' to 'int' [-Wshorten-64-to-32]
    int timeoutMillis = senderReadTimeout / kWaitTimeoutFactor;
        ~~~~~~~~~~~~~   ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~

... etc...