diff --git a/lib/cpp/src/thrift/transport/THeaderTransport.cpp b/lib/cpp/src/thrift/transport/THeaderTransport.cpp index b3b8333893d..70510d95c45 100644 --- a/lib/cpp/src/thrift/transport/THeaderTransport.cpp +++ b/lib/cpp/src/thrift/transport/THeaderTransport.cpp @@ -23,6 +23,8 @@ #include #include +#include + #include #include #include @@ -40,6 +42,20 @@ using std::shared_ptr; namespace transport { +/** + * Legacy code in transport implementations have overflow issues + * that need to be enforced. + */ +template To safe_numeric_cast(From i) { + try { + return boost::numeric_cast(i); + } + catch (const std::bad_cast& bc) { + throw TTransportException(TTransportException::CORRUPTED_DATA, + bc.what()); + } +} + using namespace apache::thrift::protocol; using apache::thrift::protocol::TBinaryProtocol; @@ -607,6 +623,11 @@ uint32_t THeaderTransport::writeVarint32(int32_t n, uint8_t* pkt) { uint32_t THeaderTransport::writeVarint16(int16_t n, uint8_t* pkt) { return writeVarint32(n, pkt); } + +uint16_t THeaderTransport::getNumTransforms() const { + return safe_numeric_cast(writeTrans_.size()); +} + } } } // apache::thrift::transport diff --git a/lib/cpp/src/thrift/transport/THeaderTransport.h b/lib/cpp/src/thrift/transport/THeaderTransport.h index 0343fe3e1df..a6ffd09a157 100644 --- a/lib/cpp/src/thrift/transport/THeaderTransport.h +++ b/lib/cpp/src/thrift/transport/THeaderTransport.h @@ -72,7 +72,7 @@ class THeaderTransport : public TVirtualTransport& transport, + explicit THeaderTransport(const std::shared_ptr& transport, std::shared_ptr config = nullptr) : TVirtualTransport(transport, config), outTransport_(transport), @@ -140,9 +140,7 @@ class THeaderTransport : public TVirtualTransport(writeTrans_.size()); - } + uint16_t getNumTransforms() const; void setTransform(uint16_t transId) { writeTrans_.push_back(transId); } diff --git a/lib/cpp/src/thrift/transport/TTransportException.h b/lib/cpp/src/thrift/transport/TTransportException.h index dd5f361f151..8763ef97e08 100644 --- a/lib/cpp/src/thrift/transport/TTransportException.h +++ b/lib/cpp/src/thrift/transport/TTransportException.h @@ -20,7 +20,6 @@ #ifndef _THRIFT_TRANSPORT_TTRANSPORTEXCEPTION_H_ #define _THRIFT_TRANSPORT_TTRANSPORTEXCEPTION_H_ 1 -#include #include #include @@ -86,20 +85,6 @@ class TTransportException : public apache::thrift::TException { TTransportExceptionType type_; }; -/** - * Legacy code in transport implementations have overflow issues - * that need to be enforced. - */ -template To safe_numeric_cast(From i) { - try { - return boost::numeric_cast(i); - } - catch (const std::bad_cast& bc) { - throw TTransportException(TTransportException::CORRUPTED_DATA, - bc.what()); - } -} - } } } // apache::thrift::transport diff --git a/test/cpp/src/TestServer.cpp b/test/cpp/src/TestServer.cpp index 7bb40a04534..518ecbf06b7 100644 --- a/test/cpp/src/TestServer.cpp +++ b/test/cpp/src/TestServer.cpp @@ -136,7 +136,7 @@ class TestHandler : public ThriftTestIf { void testBinary(std::string& _return, const std::string& thing) override { std::ostringstream hexstr; hexstr << std::hex << thing; - printf("testBinary(%lu: %s)\n", safe_numeric_cast(thing.size()), hexstr.str().c_str()); + printf("testBinary(%lu: %s)\n", static_cast(thing.size()), hexstr.str().c_str()); _return = thing; }