Fixed uninitialized recvfrom(2) 'fromlen'.
authorshort <>
Sun, 23 May 2004 20:09:05 +0000 (20:09 +0000)
committershort <>
Sun, 23 May 2004 20:09:05 +0000 (20:09 +0000)
src/network.c

index 545f1d1..4f790e6 100644 (file)
@@ -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);