aboutsummaryrefslogtreecommitdiff
path: root/src/gns/gnunet-service-gns.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-05-20 23:40:20 +0200
committerChristian Grothoff <christian@grothoff.org>2018-05-20 23:40:20 +0200
commitd080cb1ed80a0e528b2b755ee48ca18cb670175e (patch)
treed8c0edab6035e4d38138b303566e972fbf8b8c5f /src/gns/gnunet-service-gns.c
parent0a8c135eedab5213b31c21b3d4b800e5f0f6041f (diff)
downloadgnunet-d080cb1ed80a0e528b2b755ee48ca18cb670175e.tar.gz
gnunet-d080cb1ed80a0e528b2b755ee48ca18cb670175e.zip
check return values from GNSRECORD_record_serialize/size always
Diffstat (limited to 'src/gns/gnunet-service-gns.c')
-rw-r--r--src/gns/gnunet-service-gns.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/gns/gnunet-service-gns.c b/src/gns/gnunet-service-gns.c
index cffae824d..aaa4aeb0e 100644
--- a/src/gns/gnunet-service-gns.c
+++ b/src/gns/gnunet-service-gns.c
@@ -334,30 +334,43 @@ client_connect_cb (void *cls,
334 * @param rd the record data 334 * @param rd the record data
335 */ 335 */
336static void 336static void
337send_lookup_response (void* cls, 337send_lookup_response (void *cls,
338 uint32_t rd_count, 338 uint32_t rd_count,
339 const struct GNUNET_GNSRECORD_Data *rd) 339 const struct GNUNET_GNSRECORD_Data *rd)
340{ 340{
341 struct ClientLookupHandle *clh = cls; 341 struct ClientLookupHandle *clh = cls;
342 struct GnsClient *gc = clh->gc; 342 struct GnsClient *gc = clh->gc;
343 struct GNUNET_MQ_Envelope *env; 343 struct GNUNET_MQ_Envelope *env;
344 struct LookupResultMessage *rmsg; 344 struct LookupResultMessage *rmsg;
345 size_t len; 345 ssize_t len;
346 346
347 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 347 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
348 "Sending LOOKUP_RESULT message with %u results\n", 348 "Sending LOOKUP_RESULT message with %u results\n",
349 (unsigned int) rd_count); 349 (unsigned int) rd_count);
350 len = GNUNET_GNSRECORD_records_get_size (rd_count, 350 len = GNUNET_GNSRECORD_records_get_size (rd_count,
351 rd); 351 rd);
352 if (len < 0)
353 {
354 GNUNET_break (0);
355 GNUNET_SERVICE_client_drop (gc->client);
356 return;
357 }
358 if (len > UINT16_MAX - sizeof (*rmsg))
359 {
360 GNUNET_break (0);
361 GNUNET_SERVICE_client_drop (gc->client);
362 return;
363 }
352 env = GNUNET_MQ_msg_extra (rmsg, 364 env = GNUNET_MQ_msg_extra (rmsg,
353 len, 365 len,
354 GNUNET_MESSAGE_TYPE_GNS_LOOKUP_RESULT); 366 GNUNET_MESSAGE_TYPE_GNS_LOOKUP_RESULT);
355 rmsg->id = clh->request_id; 367 rmsg->id = clh->request_id;
356 rmsg->rd_count = htonl (rd_count); 368 rmsg->rd_count = htonl (rd_count);
357 GNUNET_GNSRECORD_records_serialize (rd_count, 369 GNUNET_assert (len ==
358 rd, 370 GNUNET_GNSRECORD_records_serialize (rd_count,
359 len, 371 rd,
360 (char*) &rmsg[1]); 372 len,
373 (char*) &rmsg[1]));
361 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (gc->client), 374 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (gc->client),
362 env); 375 env);
363 GNUNET_CONTAINER_DLL_remove (gc->clh_head, 376 GNUNET_CONTAINER_DLL_remove (gc->clh_head,