Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-1931

Sending a frame size of zero to a TNonblockingServer causes an assertion failure

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Not A Bug
    • 0.9
    • 0.10.0
    • C++ - Library
    • Ubuntu 10.04 and 12.04, both 64-bit

    Description

      TNonblockingServer::TConnection::workSocket doesn't check if readWant_ is zero before returning. Sending a frame with a size of zero leads to an assertion failure:
      src/thrift/server/TNonblockingServer.cpp:494: void apache::thrift::server::TNonblockingServer::TConnection::workSocket(): Assertion `readBufferPos_ < readWant_' failed.

      (You can reproduce this behavior on a TNonblockingServer by doing echo -e '\0\0\0\0' | nc server port.)

      It can probably be fixed by checking if readWant_ is zero before the transition() call in workSocket, and disconnecting the client if so (just like what happens if readWant_ is too large). Not sure if this is necessarily the right thing to do though.

      Attachments

        Activity

          People

            jking3 James E. King III
            fuzziqersoftware Martin Michelsen
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: