[ https://issues.apache.org/jira/browse/THRIFT-2018?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
kuldeep gupta updated THRIFT-2018: ---------------------------------- Attachment: thrift-jira-thrift-2018_resource_leak.patch Adding patch for resource leak in TBuffertransports.cpp Jira Thrift-2018 issue, Please review it and push to main branch. > Resource Leak in TBufferTransports in cpp library of thrift 0.9.0 > ----------------------------------------------------------------- > > Key: THRIFT-2018 > URL: https://issues.apache.org/jira/browse/THRIFT-2018 > Project: Thrift > Issue Type: Bug > Components: C++ - Library > Affects Versions: 0.9 > Environment: thrift 0.9.0 on Linux 2.6.32-220.el6.x86_64 > Reporter: kuldeep gupta > Attachments: thrift-jira-thrift-2018_resource_leak.patch > > > In file lib/cpp/src/thrift/transport/TBufferTransports.cpp > void TMemoryBuffer::ensureCanWrite(uint32_t len) { > 333 // Check available space > 334 uint32_t avail = available_write(); > 335 if (len <= avail) { > 336 return; > 337 } > 338 > 339 if (!owner_) { > 340 throw TTransportException("Insufficient space in external > MemoryBuffer"); > 341 } > 342 > 343 // Grow the buffer as necessary. > 344 uint32_t new_size = bufferSize_; > 345 while (len > avail) { > 346 new_size = new_size > 0 ? new_size * 2 : 1; > 347 avail = available_write() + (new_size - bufferSize_); > 348 } > 349 > 350 // Allocate into a new pointer so we don't bork ours if it fails. > 351 void* new_buffer = std::realloc(buffer_, new_size); > 352 if (new_buffer == NULL) { > 353 throw std::bad_alloc(); > 354 } > 355 bufferSize_ = new_size; > 356 > 357 ptrdiff_t offset = (uint8_t*)new_buffer - buffer_; > 358 buffer_ += offset; > 359 rBase_ += offset; > 360 rBound_ += offset; > 361 wBase_ += offset; > 362 wBound_ = buffer_ + bufferSize_; > 363 } > In the Above code at line number 351. > 1. Storage is returned from allocation function "realloc(void *, size_t)". > 2. Assigning: "new_buffer" = storage returned from "realloc(this->buffer_, > new_size)". > 3. At line number 363 > Variable "new_buffer" going out of scope leaks the storage it points to. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira