From 051a1121219617c530b553d70be0e849fc7dbc7e Mon Sep 17 00:00:00 2001 From: MegaBrutal Date: Wed, 21 Nov 2018 18:00:15 +0100 Subject: [PATCH] Avoid memory leaks when using TRelayer Ensure to free TTCPRFCConnection and TRelayer instance when TRelayer.OpenConnection fails. modified: Relay.pas modified: Spool.pas --- Relay.pas | 5 ++++- Spool.pas | 6 +++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Relay.pas b/Relay.pas index bcbcc9d..017d943 100644 --- a/Relay.pas +++ b/Relay.pas @@ -176,6 +176,7 @@ begin FTransactionComplete:= false; FRoutingTarget:= RoutingTable.GetRouteInfo(Envelope.RelayHost); Response:= TRFCReply.Create; + TCP:= nil; FillChar(SMTPExtensions, SizeOf(TSMTPExtensions), #0); end; @@ -183,6 +184,7 @@ destructor TRelayer.Destroy; begin FRoutingTarget.Free; Response.Free; + if TCP <> nil then TCP.Free; inherited Destroy; end; @@ -340,6 +342,7 @@ begin Inc(i); end; Result:= TCP.Connected; + if not TCP.Connected then FreeAndNil(TCP); end else Result:= false; MXList.Free; @@ -539,7 +542,7 @@ procedure TRelayer.CloseConnection; begin TCP.SendCommand(SMTP_C_QUIT); {TCP.ReadResponse(Response);} - TCP.Free; + FreeAndNil(TCP); end; diff --git a/Spool.pas b/Spool.pas index 1e45101..118e367 100644 --- a/Spool.pas +++ b/Spool.pas @@ -1,6 +1,6 @@ { MegaBrutal's SMTP Server (MgSMTP) - Copyright (C) 2010-2015 MegaBrutal + Copyright (C) 2010-2018 MegaBrutal This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by @@ -873,13 +873,13 @@ begin AssignDeliveryStatusToSMTPCodes(CurrEnv, Relayer.IsTransactionComplete); Relayer.CloseConnection; - Relayer.Free; HandleDeliveryResults(SpoolObject, false, CurrEnv, FailEnv, 0, ''); end else begin HandleDeliveryResults(SpoolObject, false, CurrEnv, FailEnv, DS_DELAYED or DS_CONNECTIONFAIL, DSMSG_CONNECTIONFAIL + Relayer.RelayServerName); end; - { Free envelope. } + { Free relayer and envelope. } + Relayer.Free; CurrEnv.Free; end; -- 2.34.1