101 lines
3.6 KiB
Diff
101 lines
3.6 KiB
Diff
From 4d5c5d6af772f5fe6121eec403305a1b4340327d Mon Sep 17 00:00:00 2001
|
||
From: Philip Withnall <pwithnall@endlessos.org>
|
||
Date: Thu, 4 Feb 2021 14:00:53 +0000
|
||
Subject: [PATCH 09/12] =?UTF-8?q?gsocket:=20Use=20gsize=20to=20track=20nat?=
|
||
=?UTF-8?q?ive=20sockaddr=E2=80=99s=20size?=
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
Don’t use an `int`, that’s potentially too small. In practical terms,
|
||
this is not a problem, since no socket address is going to be that big.
|
||
|
||
By making these changes we can use `g_memdup2()` without warnings,
|
||
though. Fewer warnings is good.
|
||
|
||
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
|
||
Helps: #2319
|
||
---
|
||
gio/gsocket.c | 17 +++++++++++------
|
||
1 file changed, 11 insertions(+), 6 deletions(-)
|
||
|
||
diff --git a/gio/gsocket.c b/gio/gsocket.c
|
||
index b4a941eb1..7f41ffd3c 100644
|
||
--- a/gio/gsocket.c
|
||
+++ b/gio/gsocket.c
|
||
@@ -80,6 +80,8 @@
|
||
#include "gwin32networking.h"
|
||
#endif
|
||
|
||
+#include "gstrfuncsprivate.h"
|
||
+
|
||
/**
|
||
* SECTION:gsocket
|
||
* @short_description: Low-level socket object
|
||
@@ -173,7 +175,7 @@ static gboolean g_socket_datagram_based_condition_wait (GDatagramBased
|
||
GError **error);
|
||
|
||
static GSocketAddress *
|
||
-cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len);
|
||
+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len);
|
||
|
||
static gssize
|
||
g_socket_receive_message_with_timeout (GSocket *socket,
|
||
@@ -270,7 +272,7 @@ struct _GSocketPrivate
|
||
struct {
|
||
GSocketAddress *addr;
|
||
struct sockaddr *native;
|
||
- gint native_len;
|
||
+ gsize native_len;
|
||
guint64 last_used;
|
||
} recv_addr_cache[RECV_ADDR_CACHE_SIZE];
|
||
};
|
||
@@ -5018,14 +5020,14 @@ g_socket_send_messages_with_timeout (GSocket *socket,
|
||
}
|
||
|
||
static GSocketAddress *
|
||
-cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
|
||
+cache_recv_address (GSocket *socket, struct sockaddr *native, size_t native_len)
|
||
{
|
||
GSocketAddress *saddr;
|
||
gint i;
|
||
guint64 oldest_time = G_MAXUINT64;
|
||
gint oldest_index = 0;
|
||
|
||
- if (native_len <= 0)
|
||
+ if (native_len == 0)
|
||
return NULL;
|
||
|
||
saddr = NULL;
|
||
@@ -5033,7 +5035,7 @@ cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
|
||
{
|
||
GSocketAddress *tmp = socket->priv->recv_addr_cache[i].addr;
|
||
gpointer tmp_native = socket->priv->recv_addr_cache[i].native;
|
||
- gint tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
|
||
+ gsize tmp_native_len = socket->priv->recv_addr_cache[i].native_len;
|
||
|
||
if (!tmp)
|
||
continue;
|
||
@@ -5063,7 +5065,7 @@ cache_recv_address (GSocket *socket, struct sockaddr *native, int native_len)
|
||
g_free (socket->priv->recv_addr_cache[oldest_index].native);
|
||
}
|
||
|
||
- socket->priv->recv_addr_cache[oldest_index].native = g_memdup (native, native_len);
|
||
+ socket->priv->recv_addr_cache[oldest_index].native = g_memdup2 (native, native_len);
|
||
socket->priv->recv_addr_cache[oldest_index].native_len = native_len;
|
||
socket->priv->recv_addr_cache[oldest_index].addr = g_object_ref (saddr);
|
||
socket->priv->recv_addr_cache[oldest_index].last_used = g_get_monotonic_time ();
|
||
@@ -5213,6 +5215,9 @@ g_socket_receive_message_with_timeout (GSocket *socket,
|
||
{
|
||
win32_unset_event_mask (socket, FD_READ);
|
||
|
||
+ /* addrlen has to be of type int because that’s how WSARecvFrom() is defined */
|
||
+ G_STATIC_ASSERT (sizeof addr <= G_MAXINT);
|
||
+
|
||
addrlen = sizeof addr;
|
||
if (address)
|
||
result = WSARecvFrom (socket->priv->fd,
|
||
--
|
||
2.31.1
|
||
|