Incoming ftp session cannot be same as sending session (when
authorPekka Riikonen <priikone@silcnet.org>
Mon, 9 Sep 2002 10:19:56 +0000 (10:19 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Mon, 9 Sep 2002 10:19:56 +0000 (10:19 +0000)
sending file to yourself).  Bug #24.

CHANGES
lib/silcclient/client.c
lib/silcclient/client_ftp.c

diff --git a/CHANGES b/CHANGES
index 335577e2dea111743d7e5c552d2d72adfb7708b7..6e59cd83e46b3de57928ac1985314dcddcbe9132 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,10 @@
+Mon Sep  9 12:18:18 CEST 2002  Pekka Riikonen <priikone@silcnet.org>
+
+       * 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 <priikone@silcnet.org>
 
        * Implemented the draft-riikonen-precense-attrs draft and
index b3835a150ed94e1bed4e4f9289480d0964f5ac9a..cc8841988568a3cfe07ead9f75503275252bd698 100644 (file)
@@ -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;
index d22d4e4ceefa85a5a90e590618ecc9880aec896c..aed0f01cc60ed7d8b5123343c90a6bb4f4674015 100644 (file)
@@ -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;
   }