Modify

Ticket #2910 (closed Bugs: fixed)

Opened 5 years ago

Last modified 5 years ago

asio & ssl - leaking io_handler when user-provided handler throws

Reported by: Paul Groke <pgroke@…> 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);
    }

Attachments

Change History

comment:1 Changed 5 years ago by Paul Groke <pgroke@…>

p.S.: the bug is repeated in handshake_handler<>::handler_impl and shutdown_handler<>::handler_impl

comment:2 Changed 5 years ago by chris_kohlhoff

  • Status changed from new to closed
  • Resolution set to fixed

(In [52293]) Prevent memory leaks when an async SSL operation's completion handler throws. Fixes #2910.

comment:3 Changed 5 years ago by chris_kohlhoff

(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.

........

View

Add a comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.