THRIFT-1690 Sockets and Pipe Handles truncated on Win64
Patch: Ben Craig
git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1394182 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/cpp/src/thrift/protocol/TDenseProtocol.cpp b/lib/cpp/src/thrift/protocol/TDenseProtocol.cpp
index 35400d1..1eb444b 100644
--- a/lib/cpp/src/thrift/protocol/TDenseProtocol.cpp
+++ b/lib/cpp/src/thrift/protocol/TDenseProtocol.cpp
@@ -245,7 +245,7 @@
while (vlq > 0) {
assert(pos >= 0);
- buf[pos] = (vlq | 0x80);
+ buf[pos] = static_cast<uint8_t>(vlq | 0x80);
vlq >>= 7;
pos--;
}
@@ -463,7 +463,9 @@
}
uint32_t TDenseProtocol::subWriteString(const std::string& str) {
- uint32_t size = str.size();
+ if(str.size() > static_cast<size_t>((std::numeric_limits<int32_t>::max)()))
+ throw TProtocolException(TProtocolException::SIZE_LIMIT);
+ uint32_t size = static_cast<uint32_t>(str.size());
uint32_t xfer = subWriteI32((int32_t)size);
if (size > 0) {
trans_->write((uint8_t*)str.data(), size);