[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

channel_accept memory leak


Hi,

Found another small memory leak. The patch should self-explain as it's
quite obvious.

It was found in v0-4 branch, and I think it's likely also be in master.

Thanks,

Vic
From c49e89801cc42fcde22ba21d704657e55f966dbb Mon Sep 17 00:00:00 2001
From: Vic Lee <llyzs@xxxxxxx>
Date: Mon, 1 Feb 2010 23:26:10 +0800
Subject: [PATCH] The ssh_message object needs to be freed after processing in channel_accept().


Signed-off-by: Vic Lee <llyzs@xxxxxxx>
---
 libssh/channels.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/libssh/channels.c b/libssh/channels.c
index 13ea25f..a046e89 100644
--- a/libssh/channels.c
+++ b/libssh/channels.c
@@ -1359,6 +1359,7 @@ static ssh_channel channel_accept(ssh_session session, int channeltype,
   };
 #endif
   ssh_message msg = NULL;
+  ssh_channel channel = NULL;
   struct ssh_iterator *iterator;
   int t;
 
@@ -1373,7 +1374,9 @@ static ssh_channel channel_accept(ssh_session session, int channeltype,
         if (ssh_message_type(msg) == SSH_REQUEST_CHANNEL_OPEN &&
             ssh_message_subtype(msg) == channeltype) {
           ssh_list_remove(session->ssh_message_list, iterator);
-          return ssh_message_channel_request_open_reply_accept(msg);
+          channel = ssh_message_channel_request_open_reply_accept(msg);
+          ssh_message_free(msg);
+          return channel;
         }
         iterator = iterator->next;
       }
-- 
1.6.5


Archive administrator: postmaster@lists.cynapses.org