From 4df0c2bdc92c4e66d0a6c26d05ce7ae1d4bdd5fb Mon Sep 17 00:00:00 2001 From: Bart Polot Date: Thu, 21 Nov 2013 17:08:07 +0000 Subject: - don't crash on channel not found --- src/mesh/gnunet-service-mesh_local.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'src/mesh/gnunet-service-mesh_local.c') diff --git a/src/mesh/gnunet-service-mesh_local.c b/src/mesh/gnunet-service-mesh_local.c index 23319d458..bf018c56f 100644 --- a/src/mesh/gnunet-service-mesh_local.c +++ b/src/mesh/gnunet-service-mesh_local.c @@ -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); } -- cgit v1.2.3