]> jfr.im git - irc/weechat/weechat.git/commitdiff
xfer: fix crash on `/dcc chat`
authorSébastien Helleu <redacted>
Thu, 14 Sep 2023 18:48:58 +0000 (20:48 +0200)
committerSébastien Helleu <redacted>
Thu, 14 Sep 2023 18:48:58 +0000 (20:48 +0200)
src/plugins/xfer/xfer-network.c
src/plugins/xfer/xfer.c
src/plugins/xfer/xfer.h

index 4e1e13e0a5dc362ed70e698effa72fe7a3141451..8f7609bb32f0b1b2c10ace8fb09016dd41b80687 100644 (file)
@@ -523,7 +523,7 @@ xfer_network_fd_cb (const void *pointer, void *data, int fd)
 
     if (xfer->status == XFER_STATUS_CONNECTING)
     {
-        if (XFER_IS_PASSIVE(xfer->type))
+        if (XFER_IS_FILE_PASSIVE(xfer->type))
         {
             xfer->last_activity = time (NULL);
             sock = accept (xfer->sock,
index aaa13680ae36a96a97ecc21d5d484e880492ced2..317cd42773514255f8f64dca65dafd98d2042243 100644 (file)
@@ -702,7 +702,7 @@ xfer_new (const char *plugin_name, const char *plugin_id,
         new_xfer->remote_address_str = strdup ("");
     }
 
-    if (XFER_IS_PASSIVE(type))
+    if (XFER_IS_FILE_PASSIVE(type) || (type == XFER_TYPE_CHAT_SEND))
     {
         rc = getnameinfo ((struct sockaddr *)local_address, local_address_length, str_address,
                           sizeof (str_address), NULL, 0, NI_NUMERICHOST);
@@ -1102,7 +1102,8 @@ xfer_add_cb (const void *pointer, void *data,
         }
     }
 
-    if (XFER_IS_RECV(type))
+    if ((type == XFER_TYPE_FILE_RECV_ACTIVE)
+        || (type == XFER_TYPE_FILE_RECV_PASSIVE))
     {
         filename2 = strdup (filename);
         sscanf (weechat_infolist_string (infolist, "size"), "%llu", &file_size);
@@ -1203,7 +1204,7 @@ xfer_add_cb (const void *pointer, void *data,
             goto error;
         }
     }
-    if (XFER_IS_PASSIVE(type))
+    if (XFER_IS_FILE_PASSIVE(type) || (type == XFER_TYPE_CHAT_SEND))
     {
         memset (&bind_addr, 0, sizeof (bind_addr));
 
@@ -1351,7 +1352,8 @@ xfer_add_cb (const void *pointer, void *data,
         }
     }
 
-    if (XFER_IS_RECV(type))
+    if ((type == XFER_TYPE_FILE_RECV_ACTIVE)
+        || (type == XFER_TYPE_FILE_RECV_PASSIVE))
     {
         if (filename2)
         {
@@ -1365,14 +1367,19 @@ xfer_add_cb (const void *pointer, void *data,
     {
         ptr_xfer = xfer_new (plugin_name, plugin_id, type, protocol,
                              remote_nick, local_nick, charset_modifier,
-                             short_filename, file_size, proxy, remote_addr,
-                             remote_addr_length, local_addr, local_addr_length, port, sock, filename2, token);
+                             short_filename, file_size, proxy,
+                             remote_addr, remote_addr_length,
+                             local_addr, local_addr_length,
+                             port, sock, filename2, token);
     }
     else
     {
         ptr_xfer = xfer_new (plugin_name, plugin_id, type, protocol,
-                             remote_nick, local_nick, charset_modifier, NULL,
-                             0, proxy, NULL, 0, local_addr, local_addr_length, port, sock, NULL, token);
+                             remote_nick, local_nick, charset_modifier,
+                             NULL, 0, proxy,
+                             remote_addr, remote_addr_length,
+                             local_addr, local_addr_length,
+                             port, sock, NULL, token);
     }
 
     if (!ptr_xfer)
index fd213f6a8fdd4a1f4fcb13cd694542565a03553c..554eb43905e361f557ec2bfbe03fdbde93b6cdff 100644 (file)
@@ -133,8 +133,8 @@ enum t_xfer_hash_status
                             (type == XFER_TYPE_CHAT_SEND))
 #define XFER_IS_ACTIVE(type) ((type == XFER_TYPE_FILE_RECV_ACTIVE) || \
                               (type == XFER_TYPE_FILE_SEND_ACTIVE))
-#define XFER_IS_PASSIVE(type) ((type == XFER_TYPE_FILE_RECV_PASSIVE) || \
-                               (type == XFER_TYPE_FILE_SEND_PASSIVE))
+#define XFER_IS_FILE_PASSIVE(type) ((type == XFER_TYPE_FILE_RECV_PASSIVE) || \
+                                    (type == XFER_TYPE_FILE_SEND_PASSIVE))
 
 #define XFER_HAS_ENDED(status) ((status == XFER_STATUS_DONE) ||      \
                                 (status == XFER_STATUS_FAILED) ||    \