extensive message checking
authorSree Harsha Totakura <totakura@in.tum.de>
Fri, 27 Jul 2012 14:37:24 +0000 (14:37 +0000)
committerSree Harsha Totakura <totakura@in.tum.de>
Fri, 27 Jul 2012 14:37:24 +0000 (14:37 +0000)
src/testbed/gnunet-service-testbed.c

index 5162c6a11b1db56b4b282d5da64816f1fb317350..81ca312e077d84217368d49f21bfd2b5bb91c9b2 100644 (file)
@@ -884,27 +884,22 @@ handle_add_host (void *cls,
   uint16_t username_length;
   uint16_t hostname_length;
   uint16_t reply_size;
+  uint16_t msize;
   
   msg = (const struct GNUNET_TESTBED_AddHostMessage *) message;
-  username_length = ntohs (msg->user_name_length);
-  username_length = (0 == username_length) ? 0 : username_length + 1;
+  msize = ntohs (msg->header.size);
   username = (char *) &(msg[1]);
+  username_length = ntohs (msg->user_name_length);
+  GNUNET_assert (msize > (sizeof (struct GNUNET_TESTBED_AddHostMessage)
+                         + username_length + 1)); /* msg must contain hostname */
+  if (0 != username_length)
+    GNUNET_assert ('\0' == username[username_length]);
+  username_length = (0 == username_length) ? 0 : username_length + 1;             
   hostname = username + username_length;
-  if (ntohs (message->size) <=
-      (sizeof (struct GNUNET_TESTBED_AddHostMessage) + username_length))
-  {
-    GNUNET_break (0);
-    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
-    return;
-  }
-  hostname_length = ntohs (message->size)
-    - (sizeof (struct GNUNET_TESTBED_AddHostMessage) + username_length);
-  if (strlen (hostname) != hostname_length - 1)
-  {
-    GNUNET_break (0);
-    GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
-    return;
-  }
+  hostname_length = msize - (sizeof (struct GNUNET_TESTBED_AddHostMessage)
+                            + username_length);
+  GNUNET_assert ('\0' == hostname[hostname_length - 1]);
+  GNUNET_assert (strlen (hostname) == hostname_length - 1);
   host_id = ntohl (msg->host_id);
   LOG_DEBUG ("Received ADDHOST message\n");
   LOG_DEBUG ("-------host id: %u\n", host_id);