THRIFT-2021: Improve large binary protocol string performance
Client: cpp
Patch: Ben Craig
diff --git a/lib/cpp/src/thrift/protocol/TBinaryProtocol.tcc b/lib/cpp/src/thrift/protocol/TBinaryProtocol.tcc
index 54d79b7..40226a5 100644
--- a/lib/cpp/src/thrift/protocol/TBinaryProtocol.tcc
+++ b/lib/cpp/src/thrift/protocol/TBinaryProtocol.tcc
@@ -446,17 +446,8 @@
return size;
}
- // Use the heap here to prevent stack overflow for v. large strings
- if (size > this->string_buf_size_ || this->string_buf_ == NULL) {
- void* new_string_buf = std::realloc(this->string_buf_, (uint32_t)size);
- if (new_string_buf == NULL) {
- throw std::bad_alloc();
- }
- this->string_buf_ = (uint8_t*)new_string_buf;
- this->string_buf_size_ = size;
- }
- this->trans_->readAll(this->string_buf_, size);
- str.assign((char*)this->string_buf_, size);
+ str.resize(size);
+ this->trans_->readAll(reinterpret_cast<uint8_t *>(&str[0]), size);
return (uint32_t)size;
}