- don't crash on channel not found
authorBart Polot <bart@net.in.tum.de>
Thu, 21 Nov 2013 17:08:07 +0000 (17:08 +0000)
committerBart Polot <bart@net.in.tum.de>
Thu, 21 Nov 2013 17:08:07 +0000 (17:08 +0000)
src/mesh/gnunet-service-mesh_local.c

index 23319d4581488e1b004d9f64337625d25fd46ef6..bf018c56f1684355cd484350d64c8341cf068897 100644 (file)
@@ -778,15 +778,29 @@ GML_shutdown (void)
 struct MeshChannel *
 GML_channel_get (struct MeshClient *c, MESH_ChannelNumber chid)
 {
+  struct GNUNET_CONTAINER_MultiHashMap32 *map;
+
   if (0 == (chid & GNUNET_MESH_LOCAL_CHANNEL_ID_CLI))
   {
     GNUNET_break_op (0);
     LOG (GNUNET_ERROR_TYPE_DEBUG, "CHID %X not a local chid\n", chid);
     return NULL;
   }
+
   if (chid >= GNUNET_MESH_LOCAL_CHANNEL_ID_SERV)
-    return GNUNET_CONTAINER_multihashmap32_get (c->incoming_channels, chid);
-  return GNUNET_CONTAINER_multihashmap32_get (c->own_channels, chid);
+    map = c->incoming_channels;
+  else if (chid >= GNUNET_MESH_LOCAL_CHANNEL_ID_CLI)
+    map = c->own_channels;
+
+  if (NULL == map)
+  {
+    GNUNET_break (0);
+    LOG (GNUNET_ERROR_TYPE_DEBUG,
+         "Client %s does no t have a valid map for CHID %X\n",
+         GML_2s (c), chid);
+    return NULL;
+  }
+  return GNUNET_CONTAINER_multihashmap32_get (map, chid);
 }