diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-05-13 21:17:12 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-05-13 21:17:12 +0200 |
commit | 98ac2b34f979cf10da24c984e690dabf7b34794b (patch) | |
tree | ed4fd15409066b5403f02c23aab9e14b179bc874 /src/namestore | |
parent | fa2978883e1585b1eeff3a22b7a9b4f174a45ca3 (diff) | |
download | gnunet-98ac2b34f979cf10da24c984e690dabf7b34794b.tar.gz gnunet-98ac2b34f979cf10da24c984e690dabf7b34794b.zip |
add some extra GNS-record well-formedness checks if logging is enabled
Diffstat (limited to 'src/namestore')
-rw-r--r-- | src/namestore/gnunet-service-namestore.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c index 5e654dbde..8e88558de 100644 --- a/src/namestore/gnunet-service-namestore.c +++ b/src/namestore/gnunet-service-namestore.c | |||
@@ -550,18 +550,16 @@ merge_with_nick_records (const struct GNUNET_GNSRECORD_Data *nick_rd, | |||
550 | uint64_t latest_expiration; | 550 | uint64_t latest_expiration; |
551 | size_t req; | 551 | size_t req; |
552 | char *data; | 552 | char *data; |
553 | int record_offset; | ||
554 | size_t data_offset; | 553 | size_t data_offset; |
555 | 554 | ||
556 | (*rdc_res) = 1 + rd2_length; | 555 | (*rdc_res) = 1 + rd2_length; |
557 | if (0 == 1 + rd2_length) | 556 | if (0 == 1 + rd2_length) |
558 | { | 557 | { |
558 | GNUNET_break (0); | ||
559 | (*rd_res) = NULL; | 559 | (*rd_res) = NULL; |
560 | return; | 560 | return; |
561 | } | 561 | } |
562 | req = 0; | 562 | req = sizeof (struct GNUNET_GNSRECORD_Data) + nick_rd->data_size; |
563 | for (unsigned int c=0; c< 1; c++) | ||
564 | req += sizeof (struct GNUNET_GNSRECORD_Data) + nick_rd[c].data_size; | ||
565 | for (unsigned int c=0; c< rd2_length; c++) | 563 | for (unsigned int c=0; c< rd2_length; c++) |
566 | req += sizeof (struct GNUNET_GNSRECORD_Data) + rd2[c].data_size; | 564 | req += sizeof (struct GNUNET_GNSRECORD_Data) + rd2[c].data_size; |
567 | (*rd_res) = GNUNET_malloc (req); | 565 | (*rd_res) = GNUNET_malloc (req); |
@@ -580,20 +578,19 @@ merge_with_nick_records (const struct GNUNET_GNSRECORD_Data *nick_rd, | |||
580 | latest_expiration = rd2[c].expiration_time; | 578 | latest_expiration = rd2[c].expiration_time; |
581 | (*rd_res)[c] = rd2[c]; | 579 | (*rd_res)[c] = rd2[c]; |
582 | (*rd_res)[c].data = (void *) &data[data_offset]; | 580 | (*rd_res)[c].data = (void *) &data[data_offset]; |
583 | GNUNET_memcpy ((void *) (*rd_res)[c].data, | 581 | GNUNET_memcpy (&data[data_offset], |
584 | rd2[c].data, | 582 | rd2[c].data, |
585 | rd2[c].data_size); | 583 | rd2[c].data_size); |
586 | data_offset += (*rd_res)[c].data_size; | 584 | data_offset += (*rd_res)[c].data_size; |
587 | } | 585 | } |
588 | /* append nick */ | 586 | /* append nick */ |
589 | record_offset = rd2_length; | 587 | (*rd_res)[rd2_length] = *nick_rd; |
590 | (*rd_res)[record_offset] = *nick_rd; | 588 | (*rd_res)[rd2_length].expiration_time = latest_expiration; |
591 | (*rd_res)[record_offset].expiration_time = latest_expiration; | 589 | (*rd_res)[rd2_length].data = (void *) &data[data_offset]; |
592 | (*rd_res)[record_offset].data = (void *) &data[data_offset]; | 590 | GNUNET_memcpy ((void *) (*rd_res)[rd2_length].data, |
593 | GNUNET_memcpy ((void *) (*rd_res)[record_offset].data, | ||
594 | nick_rd->data, | 591 | nick_rd->data, |
595 | nick_rd->data_size); | 592 | nick_rd->data_size); |
596 | data_offset += (*rd_res)[record_offset].data_size; | 593 | data_offset += (*rd_res)[rd2_length].data_size; |
597 | GNUNET_assert (req == (sizeof (struct GNUNET_GNSRECORD_Data)) * (*rdc_res) + data_offset); | 594 | GNUNET_assert (req == (sizeof (struct GNUNET_GNSRECORD_Data)) * (*rdc_res) + data_offset); |
598 | } | 595 | } |
599 | 596 | ||
@@ -647,7 +644,8 @@ send_lookup_response (struct NamestoreClient *nc, | |||
647 | } | 644 | } |
648 | 645 | ||
649 | name_len = strlen (name) + 1; | 646 | name_len = strlen (name) + 1; |
650 | rd_ser_len = GNUNET_GNSRECORD_records_get_size (res_count, res); | 647 | rd_ser_len = GNUNET_GNSRECORD_records_get_size (res_count, |
648 | res); | ||
651 | env = GNUNET_MQ_msg_extra (zir_msg, | 649 | env = GNUNET_MQ_msg_extra (zir_msg, |
652 | name_len + rd_ser_len, | 650 | name_len + rd_ser_len, |
653 | GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT); | 651 | GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT); |