THRIFT-4620: Ensure enough space for for zlib flush marker
Client: lib/cpp
diff --git a/lib/cpp/src/thrift/transport/TZlibTransport.cpp b/lib/cpp/src/thrift/transport/TZlibTransport.cpp
index fb5cc5d..e426dc3 100644
--- a/lib/cpp/src/thrift/transport/TZlibTransport.cpp
+++ b/lib/cpp/src/thrift/transport/TZlibTransport.cpp
@@ -255,6 +255,15 @@
throw TTransportException(TTransportException::BAD_ARGS, "flush() called after finish()");
}
+ flushToZlib(uwbuf_, uwpos_, Z_BLOCK);
+ uwpos_ = 0;
+
+ if(wstream_->avail_out < 6){
+ transport_->write(cwbuf_, cwbuf_size_ - wstream_->avail_out);
+ wstream_->next_out = cwbuf_;
+ wstream_->avail_out = cwbuf_size_;
+ }
+
flushToTransport(Z_FULL_FLUSH);
}
@@ -285,7 +294,7 @@
wstream_->avail_in = len;
while (true) {
- if (flush == Z_NO_FLUSH && wstream_->avail_in == 0) {
+ if ((flush == Z_NO_FLUSH || flush == Z_BLOCK) && wstream_->avail_in == 0) {
break;
}