allow empty/NULL context message
[oweals/gnunet.git] / src / peerstore / peerstore_common.c
index 1f86fe442ccd5a06a245b0371e0762bb8e4e0162..5a008ca62847f131e0d29fe6ee029315dc9cc293 100644 (file)
@@ -1,6 +1,6 @@
 /*
       This file is part of GNUnet
-      (C) 2012-2013 Christian Grothoff (and other contributing authors)
+      Copyright (C) 2012-2013 GNUnet e.V.
 
       GNUnet is free software; you can redistribute it and/or modify
       it under the terms of the GNU General Public License as published
@@ -14,8 +14,8 @@
 
       You should have received a copy of the GNU General Public License
       along with GNUnet; see the file COPYING.  If not, write to the
-      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-      Boston, MA 02111-1307, USA.
+      Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+      Boston, MA 02110-1301, USA.
  */
 /**
  * @file peerstore/peerstore_common.c
@@ -164,7 +164,7 @@ PEERSTORE_create_record_mq_envelope (const char *sub_system,
   }
   srm->sub_system_size = htons (ss_size);
   srm->value_size = htons (value_size);
-  srm->options = options;
+  srm->options = htonl (options);
   dummy = &srm[1];
   memcpy (dummy, sub_system, ss_size);
   dummy += ss_size;
@@ -194,14 +194,29 @@ PEERSTORE_parse_record_message (const struct GNUNET_MessageHeader *message)
 
   req_size = ntohs (message->size);
   if (req_size < sizeof (struct StoreRecordMessage))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Received message with invalid size: (%d < %d).\n",
+                (int) req_size,
+                (int) sizeof (struct StoreRecordMessage));
     return NULL;
+  }
   srm = (struct StoreRecordMessage *) message;
   ss_size = ntohs (srm->sub_system_size);
   key_size = ntohs (srm->key_size);
   value_size = ntohs (srm->value_size);
   if (ss_size + key_size + value_size + sizeof (struct StoreRecordMessage) !=
       req_size)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "Received message with invalid sizes: (%d + %d + %d + %d != %d).\n",
+                ss_size,
+                key_size,
+                value_size,
+                (int) sizeof (struct StoreRecordMessage),
+                req_size);
     return NULL;
+  }
   record = GNUNET_new (struct GNUNET_PEERSTORE_Record);
   if (GNUNET_YES == ntohs (srm->peer_set))
   {