From 9c56e290e0ceb0b66ec8a0951a15bc5735e81978 Mon Sep 17 00:00:00 2001 From: short <> Date: Sun, 23 May 2004 20:09:05 +0000 Subject: [PATCH] Fixed uninitialized recvfrom(2) 'fromlen'. --- src/network.c | 71 ++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 32 deletions(-) diff --git a/src/network.c b/src/network.c index 545f1d1..4f790e6 100644 --- a/src/network.c +++ b/src/network.c @@ -232,25 +232,27 @@ static struct client *client_new(void); static void handle_master(struct client *master) { + g_return_if_fail(master!=NULL); + + for (;;) { +char packet[0x10000]; ssize_t gotlen; struct sockaddr_in sockaddr_in_from; -char packet[0x10000]; struct client *client; struct sockaddr_in sockaddr_in_server; socklen_t sockaddr_in_from_length; - - g_return_if_fail(master!=NULL); - - sockaddr_in_from_length=sizeof(sockaddr_in_from); - while (-1!=(gotlen=recvfrom( - master->gpollfd.fd, /* s */ - packet, /* buf */ - sizeof(packet), /* len */ - 0, /* flags */ - (struct sockaddr *)&sockaddr_in_from, /* from */ - &sockaddr_in_from_length))) { /* fromlen */ GList *clientl; + sockaddr_in_from_length=sizeof(sockaddr_in_from); + if (-1==(gotlen=recvfrom( + master->gpollfd.fd, /* s */ + packet, /* buf */ + sizeof(packet), /* len */ + 0, /* flags */ + (struct sockaddr *)&sockaddr_in_from, /* from */ + &sockaddr_in_from_length))) /* fromlen */ + break; + if (sockaddr_in_from_length!=sizeof(sockaddr_in_from)) /* FIXME: errors reporting */ continue; @@ -292,21 +294,23 @@ GList *clientl; static void handle_probe(struct client *probe) { + g_return_if_fail(probe!=NULL); + + for (;;) { ssize_t gotlen; struct sockaddr_in sockaddr_in_from; char packet[0x10000]; socklen_t sockaddr_in_from_length; - g_return_if_fail(probe!=NULL); - - sockaddr_in_from_length=sizeof(sockaddr_in_from); - while (-1!=(gotlen=recvfrom( - master->gpollfd.fd, /* s */ - packet, /* buf */ - sizeof(packet), /* len */ - 0, /* flags */ - (struct sockaddr *)&sockaddr_in_from, /* from */ - &sockaddr_in_from_length))) { /* fromlen */ + sockaddr_in_from_length=sizeof(sockaddr_in_from); + if (-1==(gotlen=recvfrom( + master->gpollfd.fd, /* s */ + packet, /* buf */ + sizeof(packet), /* len */ + 0, /* flags */ + (struct sockaddr *)&sockaddr_in_from, /* from */ + &sockaddr_in_from_length))) /* fromlen */ + break; if (sockaddr_in_from_length!=sizeof(sockaddr_in_from)) /* FIXME: errors reporting */ continue; @@ -316,21 +320,24 @@ socklen_t sockaddr_in_from_length; static void handle_client(struct client *client) { + g_return_if_fail(client!=NULL); + g_return_if_fail(master!=NULL); + + for (;;) { ssize_t gotlen; struct sockaddr_in sockaddr_in_from; char packet [0x10000]; socklen_t sockaddr_in_from_length; - g_return_if_fail(client!=NULL); - g_return_if_fail(master!=NULL); - - while (-1!=(gotlen=recvfrom( - client->gpollfd.fd, /* s */ - packet, /* buf */ - sizeof(packet), /* len */ - 0, /* flags */ - (struct sockaddr *)&sockaddr_in_from, /* from */ - &sockaddr_in_from_length))) { /* fromlen */ + sockaddr_in_from_length=sizeof(sockaddr_in_from); + if (-1==(gotlen=recvfrom( + client->gpollfd.fd, /* s */ + packet, /* buf */ + sizeof(packet), /* len */ + 0, /* flags */ + (struct sockaddr *)&sockaddr_in_from, /* from */ + &sockaddr_in_from_length))) /* fromlen */ + break; if (sockaddr_in_from_length!=sizeof(sockaddr_in_from)) /* FIXME: errors reporting */ continue; client_touch(client); -- 1.8.3.1