fix segfault
[oweals/gnunet.git] / src / namestore / namestore_api.c
index 9c629b02659b183afb48c5226f741953a4ca1a44..ddf3742db2b335f2633fc5d111094c9e11b3fb08 100644 (file)
@@ -258,8 +258,11 @@ handle_lookup_name_response (struct GNUNET_NAMESTORE_QueueEntry *qe,
   }
 
   name = (char *) &msg[1];
-  GNUNET_assert ('\0' == name[name_len -1]);
-  GNUNET_assert ((name_len - 1) == strlen(name));
+  if (name_len > 0)
+  {
+    GNUNET_assert ('\0' == name[name_len -1]);
+    GNUNET_assert ((name_len - 1) == strlen(name));
+  }
   rd_tmp = &name[name_len];
 
   /* deserialize records */
@@ -479,8 +482,11 @@ handle_zone_to_name_response (struct GNUNET_NAMESTORE_QueueEntry *qe,
     expire = GNUNET_TIME_absolute_ntoh(msg->expire);
 
     name_tmp = (char *) &msg[1];
-    GNUNET_assert ('\0' == name_tmp[name_len -1]);
-    GNUNET_assert (name_len -1 == strlen(name_tmp));
+    if (name_len > 0)
+    {
+      GNUNET_assert ('\0' == name_tmp[name_len -1]);
+      GNUNET_assert (name_len -1 == strlen(name_tmp));
+    }
     rd_tmp = &name_tmp[name_len];
 
     struct GNUNET_NAMESTORE_RecordData rd[rd_count];
@@ -1538,6 +1544,15 @@ GNUNET_NAMESTORE_zone_iterator_next (struct GNUNET_NAMESTORE_ZoneIterator *it)
 
   GNUNET_assert (NULL != it);
   h = it->h;
+  struct GNUNET_NAMESTORE_ZoneIterator *tmp = it->h->z_head;
+
+  while (tmp != NULL)
+  {
+    if (tmp == it)
+      break;
+    tmp = tmp->next;
+  }
+  GNUNET_assert (NULL != tmp);
 
   /* set msg_size*/
   msg_size = sizeof (struct ZoneIterationNextMessage);
@@ -1572,6 +1587,15 @@ GNUNET_NAMESTORE_zone_iteration_stop (struct GNUNET_NAMESTORE_ZoneIterator *it)
   struct PendingMessage *pe;
   size_t msg_size = 0;
   struct GNUNET_NAMESTORE_Handle *h = it->h;
+  struct GNUNET_NAMESTORE_ZoneIterator *tmp = it->h->z_head;
+
+  while (tmp != NULL)
+  {
+    if (tmp == it)
+      break;
+    tmp = tmp->next;
+  }
+  GNUNET_assert (NULL != tmp);
 
   /* set msg_size*/
   msg_size = sizeof (struct ZoneIterationStopMessage);