#2910 closed Bugs (fixed)
asio & ssl - leaking io_handler when user-provided handler throws
Reported by: | Owned by: | chris_kohlhoff | |
---|---|---|---|
Milestone: | Boost 1.39.0 | Component: | asio |
Version: | Boost 1.38.0 | Severity: | Problem |
Keywords: | asio ssl handler io_handler leak throw throws delete openssl_stream_service | Cc: |
Description
The function boost::asio::ssl::detail::openssl_stream_service::io_handler<>::handler_impl isn't exception safe, and therefor leaks, if the invoked user-provided handler throws. Since many people bind shared_ptr<>s into their handlers, this will also keep alive their session objects. I'd consider this a major issue. (Please feel free to raise the priority to show-stopper if you think that's appropriate :-)
The current implementation (1.38.0 & trunk at the moment of filing this ticket) looks like this:
void handler_impl(const boost::system::error_code& error, size_t size) { handler_(error, size); delete this; }
Fix should be obvious:
#include <memory> // for std::auto_ptr<> // ... void handler_impl(const boost::system::error_code& error, size_t size) { std::auto_ptr<io_handler> guard(this); // or something similar handler_(error, size); }
Change History (3)
comment:1 by , 14 years ago
comment:2 by , 14 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
comment:3 by , 14 years ago
(In [52309]) Merged revisions 52288-52294 via svnmerge from https://svn.boost.org/svn/boost/trunk
........
r52288 | chris_kohlhoff | 2009-04-09 21:50:42 +1000 (Thu, 09 Apr 2009) | 2 lines
Prevent locales from affecting the formatting of endpoints. Fixes #2682.
........
r52289 | chris_kohlhoff | 2009-04-09 22:00:36 +1000 (Thu, 09 Apr 2009) | 3 lines
Correct documentation of read, read_at, write and write_at functions to match new CompletionCondition concept. Fixes #2871.
........
r52290 | chris_kohlhoff | 2009-04-09 22:03:01 +1000 (Thu, 09 Apr 2009) | 2 lines
Fix some warnings that occur with MSVC at warning level 4. Fixes #2828.
........
r52291 | chris_kohlhoff | 2009-04-09 22:04:39 +1000 (Thu, 09 Apr 2009) | 3 lines
As a performance optimisation, add an explicit check for an empty vector of timer queues.
........
r52292 | chris_kohlhoff | 2009-04-09 22:09:16 +1000 (Thu, 09 Apr 2009) | 6 lines
Implement automatic resizing of the bucket array in the internal hash maps. This is to improve performance for very large numbers of asynchronous operations and also to reduce memory usage for very small numbers. A new macro BOOST_ASIO_HASH_MAP_BUCKETS may be used to tweak the sizes used for the bucket arrays.
........
r52293 | chris_kohlhoff | 2009-04-09 22:12:50 +1000 (Thu, 09 Apr 2009) | 3 lines
Prevent memory leaks when an async SSL operation's completion handler throws. Fixes #2910.
........
r52294 | chris_kohlhoff | 2009-04-09 22:16:02 +1000 (Thu, 09 Apr 2009) | 3 lines
Fix implementation of io_control() so that it adheres to the type requirements for IoControlCommand. Fixes #2820.
........
p.S.: the bug is repeated in handshake_handler<>::handler_impl and shutdown_handler<>::handler_impl