Fix for TBufferedTransport double-buffer-size strings
Reviewed By: aditya
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664961 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cpp/src/transport/TTransportUtils.cpp b/lib/cpp/src/transport/TTransportUtils.cpp
index 9367eb5..a885020 100644
--- a/lib/cpp/src/transport/TTransportUtils.cpp
+++ b/lib/cpp/src/transport/TTransportUtils.cpp
@@ -36,18 +36,19 @@
return;
}
- if (len + wLen_ >= wBufSize_) {
+ uint32_t pos = 0;
+
+ while ((len-pos) + wLen_ >= wBufSize_) {
uint32_t copy = wBufSize_ - wLen_;
- memcpy(wBuf_ + wLen_, buf, copy);
+ memcpy(wBuf_ + wLen_, buf + pos, copy);
transport_->write(wBuf_, wBufSize_);
-
- wLen_ = len - copy;
- if (wLen_ > 0) {
- memcpy(wBuf_, buf+copy, wLen_);
- }
- } else {
- memcpy(wBuf_+wLen_, buf, len);
- wLen_ += len;
+ pos += copy;
+ wLen_ = 0;
+ }
+
+ if ((len - pos) > 0) {
+ memcpy(wBuf_ + wLen_, buf + pos, len - pos);
+ wLen_ += len - pos;
}
}