Opened 14 years ago

Closed 14 years ago

Last modified 14 years ago

#2910 closed Bugs (fixed)

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);
    }

Change History (3)

comment:1 by Paul Groke <pgroke@…>, 14 years ago

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

comment:2 by chris_kohlhoff, 14 years ago

Resolution: fixed
Status: newclosed

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

comment:3 by chris_kohlhoff, 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.

........

Note: See TracTickets for help on using tickets.