From 131f2f3031aae7fb5ae8b347c59a17bb37fb86a1 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Mon, 9 Sep 2002 10:19:56 +0000 Subject: [PATCH] Incoming ftp session cannot be same as sending session (when sending file to yourself). Bug #24. --- CHANGES | 7 +++++++ lib/silcclient/client.c | 3 ++- lib/silcclient/client_ftp.c | 10 +++++++--- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CHANGES b/CHANGES index 335577e2..6e59cd83 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,10 @@ +Mon Sep 9 12:18:18 CEST 2002 Pekka Riikonen + + * Incoming file transfer request cannot use same session as + the sending session. This can happen when sending file to + yourself. Crashed the client on quit. Affected file + lib/silcclient/client_ftp.c. Bug #24. + Sun Sep 8 18:39:25 EEST 2002 Pekka Riikonen * Implemented the draft-riikonen-precense-attrs draft and diff --git a/lib/silcclient/client.c b/lib/silcclient/client.c index b3835a15..cc884198 100644 --- a/lib/silcclient/client.c +++ b/lib/silcclient/client.c @@ -248,7 +248,8 @@ void silc_client_del_connection(SilcClient client, SilcClientConnection conn) if (conn->pending_commands) silc_dlist_uninit(conn->pending_commands); silc_free(conn->remote_host); - silc_dlist_uninit(conn->ftp_sessions); + if (conn->ftp_sessions) + silc_dlist_uninit(conn->ftp_sessions); silc_free(conn); client->internal->conns[i] = NULL; diff --git a/lib/silcclient/client_ftp.c b/lib/silcclient/client_ftp.c index d22d4e4c..aed0f01c 100644 --- a/lib/silcclient/client_ftp.c +++ b/lib/silcclient/client_ftp.c @@ -693,7 +693,6 @@ void silc_client_ftp_free_sessions(SilcClient client, silc_client_ftp_session_free(session); } silc_dlist_del(conn->ftp_sessions, session); - silc_dlist_uninit(conn->ftp_sessions); } } @@ -726,7 +725,11 @@ void silc_client_ftp_session_free(SilcClientFtpSession session) SILC_LOG_DEBUG(("Free session")); - silc_dlist_del(session->conn->ftp_sessions, session); + if (session->conn && session->conn->ftp_sessions) + silc_dlist_del(session->conn->ftp_sessions, session); + + if (session->conn && session->conn->active_session == session) + session->conn->active_session = NULL; if (session->sftp) { if (session->server) @@ -770,6 +773,7 @@ void silc_client_ftp_session_free(SilcClientFtpSession session) silc_free(session->hostname); silc_free(session->filepath); silc_free(session->path); + memset(session, 'F', sizeof(*session)); silc_free(session); } @@ -1031,7 +1035,7 @@ static void silc_client_ftp_resolve_cb(SilcClient client, silc_dlist_start(conn->ftp_sessions); while ((session = silc_dlist_get(conn->ftp_sessions)) != SILC_LIST_END) { - if (session->client_entry == client_entry) + if (session->client_entry == client_entry && !session->server) break; } -- 2.24.0