mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-15 06:47:14 +01:00
gsocks5proxy: Handle EOF when reading from a stream
The code did not handle EOF (0 byte read) correctly. This can e.g. cause an infinite loop if an incorrect socks proxy is configured. Add the appropriate checks and return an G_IO_ERROR_CONNECTION_CLOSED error if EOF is encountered.
This commit is contained in:
parent
e0c0342688
commit
56fe8cccc5
@ -717,6 +717,16 @@ nego_reply_read_cb (GObject *source,
|
||||
return;
|
||||
}
|
||||
|
||||
if (read == 0)
|
||||
{
|
||||
g_task_return_new_error (task,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_CONNECTION_CLOSED,
|
||||
"Connection to SOCKSv5 proxy server lost");
|
||||
g_object_unref (task);
|
||||
return;
|
||||
}
|
||||
|
||||
data->offset += read;
|
||||
|
||||
if (data->offset == data->length)
|
||||
@ -821,6 +831,16 @@ auth_reply_read_cb (GObject *source,
|
||||
return;
|
||||
}
|
||||
|
||||
if (read == 0)
|
||||
{
|
||||
g_task_return_new_error (task,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_CONNECTION_CLOSED,
|
||||
"Connection to SOCKSv5 proxy server lost");
|
||||
g_object_unref (task);
|
||||
return;
|
||||
}
|
||||
|
||||
data->offset += read;
|
||||
|
||||
if (data->offset == data->length)
|
||||
@ -923,6 +943,16 @@ connect_reply_read_cb (GObject *source,
|
||||
return;
|
||||
}
|
||||
|
||||
if (read == 0)
|
||||
{
|
||||
g_task_return_new_error (task,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_CONNECTION_CLOSED,
|
||||
"Connection to SOCKSv5 proxy server lost");
|
||||
g_object_unref (task);
|
||||
return;
|
||||
}
|
||||
|
||||
data->offset += read;
|
||||
|
||||
if (data->offset == data->length)
|
||||
@ -983,6 +1013,16 @@ connect_addr_len_read_cb (GObject *source,
|
||||
return;
|
||||
}
|
||||
|
||||
if (read == 0)
|
||||
{
|
||||
g_task_return_new_error (task,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_CONNECTION_CLOSED,
|
||||
"Connection to SOCKSv5 proxy server lost");
|
||||
g_object_unref (task);
|
||||
return;
|
||||
}
|
||||
|
||||
data->length = data->buffer[0] + 2;
|
||||
data->offset = 0;
|
||||
|
||||
@ -1009,6 +1049,16 @@ connect_addr_read_cb (GObject *source,
|
||||
return;
|
||||
}
|
||||
|
||||
if (read == 0)
|
||||
{
|
||||
g_task_return_new_error (task,
|
||||
G_IO_ERROR,
|
||||
G_IO_ERROR_CONNECTION_CLOSED,
|
||||
"Connection to SOCKSv5 proxy server lost");
|
||||
g_object_unref (task);
|
||||
return;
|
||||
}
|
||||
|
||||
data->offset += read;
|
||||
|
||||
if (data->offset == data->length)
|
||||
|
Loading…
x
Reference in New Issue
Block a user