[glib: 1/2] Another fix on g_socket_send_message()




commit b6f7e4678bfa8e1db6da61c9661cf0c9b2b615d6
Author: Emmanuel Fleury <emmanuel fleury gmail com>
Date:   Wed Jan 13 13:23:40 2021 +0100

    Another fix on g_socket_send_message()
    
    We forgot to take into account the case where num_vectors is '-1'.

 gio/gsocket.c | 35 +++++++++++++++++++++++++++--------
 1 file changed, 27 insertions(+), 8 deletions(-)
---
diff --git a/gio/gsocket.c b/gio/gsocket.c
index dfb6f8d8f..3a02dccde 100644
--- a/gio/gsocket.c
+++ b/gio/gsocket.c
@@ -4784,18 +4784,37 @@ g_socket_send_message (GSocket                *socket,
   gsize bytes_written = 0;
   gsize vectors_size = 0;
 
-  for (gsize i = 0; i < num_vectors; i++)
+  if (num_vectors != -1)
     {
-      /* No wrap-around for vectors_size */
-      if (vectors_size > vectors_size + vectors[i].size)
+      for (gint i = 0; i < num_vectors; i++)
         {
-          g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
-                       _("Unable to send message: %s"),
-                       _("Message vectors too large"));
-          return -1;
+          /* No wrap-around for vectors_size */
+          if (vectors_size > vectors_size + vectors[i].size)
+            {
+              g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Unable to send message: %s"),
+                           _("Message vectors too large"));
+              return -1;
+            }
+
+          vectors_size += vectors[i].size;
         }
+    }
+  else
+    {
+      for (gsize i = 0; vectors[i].buffer != NULL; i++)
+        {
+          /* No wrap-around for vectors_size */
+          if (vectors_size > vectors_size + vectors[i].size)
+            {
+              g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+                           _("Unable to send message: %s"),
+                           _("Message vectors too large"));
+              return -1;
+            }
 
-      vectors_size += vectors[i].size;
+          vectors_size += vectors[i].size;
+        }
     }
 
   /* Check if vector's buffers are too big for gssize */


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