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.