aboutsummaryrefslogtreecommitdiff
path: root/src/namestore
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2016-06-25 15:46:16 +0000
committerChristian Grothoff <christian@grothoff.org>2016-06-25 15:46:16 +0000
commit91ef3e6d0d4935dfa6dae561587b2e1d65fe07fd (patch)
tree3b3e15dbc8523d3c9bfaec194f0b7b9b05f730aa /src/namestore
parent789c62896357697e70bc477bf2ebfc33786d580c (diff)
downloadgnunet-91ef3e6d0d4935dfa6dae561587b2e1d65fe07fd.tar.gz
gnunet-91ef3e6d0d4935dfa6dae561587b2e1d65fe07fd.zip
-minor refactoring, add missing check
Diffstat (limited to 'src/namestore')
-rw-r--r--src/namestore/namestore_api.c105
1 files changed, 46 insertions, 59 deletions
diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c
index c0aa79e3f..f5b9d941b 100644
--- a/src/namestore/namestore_api.c
+++ b/src/namestore/namestore_api.c
@@ -294,6 +294,35 @@ free_ze (struct GNUNET_NAMESTORE_ZoneIterator *ze)
294 294
295 295
296/** 296/**
297 * Check that @a rd_buf of lenght @a rd_len contains
298 * @a rd_count records.
299 *
300 * @param rd_len length of @a rd_buf
301 * @param rd_buf buffer with serialized records
302 * @param rd_count number of records expected
303 * @return #GNUNET_OK if @a rd_buf is well-formed
304 */
305static int
306check_rd (size_t rd_len,
307 const void *rd_buf,
308 unsigned int rd_count)
309{
310 struct GNUNET_GNSRECORD_Data rd[rd_count];
311
312 if (GNUNET_OK !=
313 GNUNET_GNSRECORD_records_deserialize (rd_len,
314 rd_buf,
315 rd_count,
316 rd))
317 {
318 GNUNET_break (0);
319 return GNUNET_SYSERR;
320 }
321 return GNUNET_OK;
322}
323
324
325/**
297 * Handle an incoming message of type 326 * Handle an incoming message of type
298 * #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE 327 * #GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE_RESPONSE
299 * 328 *
@@ -341,15 +370,12 @@ check_lookup_result (void *cls,
341 const struct LabelLookupResponseMessage *msg) 370 const struct LabelLookupResponseMessage *msg)
342{ 371{
343 const char *name; 372 const char *name;
344 const char *rd_tmp;
345 size_t exp_msg_len; 373 size_t exp_msg_len;
346 size_t msg_len; 374 size_t msg_len;
347 size_t name_len; 375 size_t name_len;
348 size_t rd_len; 376 size_t rd_len;
349 unsigned int rd_count;
350 377
351 rd_len = ntohs (msg->rd_len); 378 rd_len = ntohs (msg->rd_len);
352 rd_count = ntohs (msg->rd_count);
353 msg_len = ntohs (msg->gns_header.header.size); 379 msg_len = ntohs (msg->gns_header.header.size);
354 name_len = ntohs (msg->name_len); 380 name_len = ntohs (msg->name_len);
355 exp_msg_len = sizeof (*msg) + name_len + rd_len; 381 exp_msg_len = sizeof (*msg) + name_len + rd_len;
@@ -367,28 +393,16 @@ check_lookup_result (void *cls,
367 } 393 }
368 if (GNUNET_NO == ntohs (msg->found)) 394 if (GNUNET_NO == ntohs (msg->found))
369 { 395 {
370 if (0 != rd_count) 396 if (0 != ntohs (msg->rd_count))
371 { 397 {
372 GNUNET_break (0); 398 GNUNET_break (0);
373 return GNUNET_SYSERR; 399 return GNUNET_SYSERR;
374 } 400 }
375 return GNUNET_OK; 401 return GNUNET_OK;
376 } 402 }
377 rd_tmp = &name[name_len]; 403 return check_rd (rd_len,
378 { 404 &name[name_len],
379 struct GNUNET_GNSRECORD_Data rd[rd_count]; 405 ntohs (msg->rd_count));
380
381 if (GNUNET_OK !=
382 GNUNET_GNSRECORD_records_deserialize (rd_len,
383 rd_tmp,
384 rd_count,
385 rd))
386 {
387 GNUNET_break (0);
388 return GNUNET_SYSERR;
389 }
390 }
391 return GNUNET_OK;
392} 406}
393 407
394 408
@@ -469,15 +483,11 @@ check_record_result (void *cls,
469 const struct RecordResultMessage *msg) 483 const struct RecordResultMessage *msg)
470{ 484{
471 const char *name; 485 const char *name;
472 const char *rd_tmp;
473 size_t exp_msg_len;
474 size_t msg_len; 486 size_t msg_len;
475 size_t name_len; 487 size_t name_len;
476 size_t rd_len; 488 size_t rd_len;
477 unsigned int rd_count;
478 489
479 rd_len = ntohs (msg->rd_len); 490 rd_len = ntohs (msg->rd_len);
480 rd_count = ntohs (msg->rd_count);
481 msg_len = ntohs (msg->gns_header.header.size); 491 msg_len = ntohs (msg->gns_header.header.size);
482 name_len = ntohs (msg->name_len); 492 name_len = ntohs (msg->name_len);
483 if (0 != ntohs (msg->reserved)) 493 if (0 != ntohs (msg->reserved))
@@ -485,8 +495,7 @@ check_record_result (void *cls,
485 GNUNET_break (0); 495 GNUNET_break (0);
486 return GNUNET_SYSERR; 496 return GNUNET_SYSERR;
487 } 497 }
488 exp_msg_len = sizeof (struct RecordResultMessage) + name_len + rd_len; 498 if (msg_len != sizeof (struct RecordResultMessage) + name_len + rd_len)
489 if (msg_len != exp_msg_len)
490 { 499 {
491 GNUNET_break (0); 500 GNUNET_break (0);
492 return GNUNET_SYSERR; 501 return GNUNET_SYSERR;
@@ -498,21 +507,9 @@ check_record_result (void *cls,
498 GNUNET_break (0); 507 GNUNET_break (0);
499 return GNUNET_SYSERR; 508 return GNUNET_SYSERR;
500 } 509 }
501 rd_tmp = &name[name_len]; 510 return check_rd (rd_len,
502 { 511 &name[name_len],
503 struct GNUNET_GNSRECORD_Data rd[rd_count]; 512 ntohs (msg->rd_count));
504
505 if (GNUNET_OK !=
506 GNUNET_GNSRECORD_records_deserialize(rd_len,
507 rd_tmp,
508 rd_count,
509 rd))
510 {
511 GNUNET_break (0);
512 return GNUNET_SYSERR;
513 }
514 }
515 return GNUNET_OK;
516} 513}
517 514
518 515
@@ -625,16 +622,18 @@ check_zone_to_name_response (void *cls,
625{ 622{
626 size_t name_len; 623 size_t name_len;
627 size_t rd_ser_len; 624 size_t rd_ser_len;
628 unsigned int rd_count;
629 const char *name_tmp; 625 const char *name_tmp;
630 const char *rd_tmp;
631 626
632 if (GNUNET_OK != ntohs (msg->res)) 627 if (GNUNET_OK != ntohs (msg->res))
633 return GNUNET_OK; 628 return GNUNET_OK;
634
635 name_len = ntohs (msg->name_len); 629 name_len = ntohs (msg->name_len);
636 rd_count = ntohs (msg->rd_count);
637 rd_ser_len = ntohs (msg->rd_len); 630 rd_ser_len = ntohs (msg->rd_len);
631 if (ntohs (msg->gns_header.header.size) !=
632 sizeof (struct ZoneToNameResponseMessage) + name_len + rd_ser_len)
633 {
634 GNUNET_break (0);
635 return GNUNET_SYSERR;
636 }
638 name_tmp = (const char *) &msg[1]; 637 name_tmp = (const char *) &msg[1];
639 if ( (name_len > 0) && 638 if ( (name_len > 0) &&
640 ('\0' != name_tmp[name_len -1]) ) 639 ('\0' != name_tmp[name_len -1]) )
@@ -642,21 +641,9 @@ check_zone_to_name_response (void *cls,
642 GNUNET_break (0); 641 GNUNET_break (0);
643 return GNUNET_SYSERR; 642 return GNUNET_SYSERR;
644 } 643 }
645 rd_tmp = &name_tmp[name_len]; 644 return check_rd (rd_ser_len,
646 { 645 &name_tmp[name_len],
647 struct GNUNET_GNSRECORD_Data rd[rd_count]; 646 ntohs (msg->rd_count));
648
649 if (GNUNET_OK !=
650 GNUNET_GNSRECORD_records_deserialize (rd_ser_len,
651 rd_tmp,
652 rd_count,
653 rd))
654 {
655 GNUNET_break (0);
656 return GNUNET_SYSERR;
657 }
658 }
659 return GNUNET_OK;
660} 647}
661 648
662 649