diff --git a/gio/gsocks5proxy.c b/gio/gsocks5proxy.c index 09b7fcac2..873db7ea6 100644 --- a/gio/gsocks5proxy.c +++ b/gio/gsocks5proxy.c @@ -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)