From 8f6810aa14198d33aa9cbde8da6aaff7b9a187e1 Mon Sep 17 00:00:00 2001 From: Nikolay Shaplov Date: Sun, 5 Jan 2025 23:31:28 +0300 Subject: [PATCH 1/2] Avoid memory leaks: should free $ssl each time we reset connection, and free both $ssl and $ctx when server object is destroyed --- t/local/64_ticket_sharing.t | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/t/local/64_ticket_sharing.t b/t/local/64_ticket_sharing.t index e0adc2f8..e785a55a 100644 --- a/t/local/64_ticket_sharing.t +++ b/t/local/64_ticket_sharing.t @@ -278,11 +278,18 @@ sub _handshake { Net::SSLeay::BIO_new(Net::SSLeay::BIO_s_mem()), ); Net::SSLeay::set_bio($ssl,$bio[0],$bio[1]); + Net::SSLeay::free($self->{ssl}) if $self->{ssl}; # call SSL_free() on old ssl value; $self->{ssl} = $ssl; $self->{rbio} = $bio[0]; $self->{wbio} = $bio[1]; } + sub DESTROY { + my $self = shift; + Net::SSLeay::free($self->{ssl}) if $self->{ssl}; # call SSL_free() on old ssl value; + Net::SSLeay::CTX_free($self->{ctx}) if $self->{ctx}; # free old ctx value; + } + sub _error { my ($self,$rv) = @_; if ($rv>0) { From a0284db194ea97e2f2df77fce30c6f41006289cd Mon Sep 17 00:00:00 2001 From: Nikolay Shaplov Date: Sun, 5 Jan 2025 23:35:38 +0300 Subject: [PATCH 2/2] To avoid memeory leaks we should free SESSION after we obtained it via d2i_SSL_SESSION() --- t/local/64_ticket_sharing.t | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/t/local/64_ticket_sharing.t b/t/local/64_ticket_sharing.t index e785a55a..4d9865db 100644 --- a/t/local/64_ticket_sharing.t +++ b/t/local/64_ticket_sharing.t @@ -63,8 +63,9 @@ if (0) { Net::SSLeay::get_session($client->_ssl)); }; $reuse = sub { - Net::SSLeay::set_session($client->_ssl, - Net::SSLeay::d2i_SSL_SESSION($saved)); + my $sess = Net::SSLeay::d2i_SSL_SESSION($saved); + Net::SSLeay::set_session($client->_ssl, $sess); + Net::SSLeay::SESSION_free($sess); }; }