aboutsummaryrefslogtreecommitdiff
path: root/src/namestore
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-05-13 21:17:12 +0200
committerChristian Grothoff <christian@grothoff.org>2018-05-13 21:17:12 +0200
commit98ac2b34f979cf10da24c984e690dabf7b34794b (patch)
treeed4fd15409066b5403f02c23aab9e14b179bc874 /src/namestore
parentfa2978883e1585b1eeff3a22b7a9b4f174a45ca3 (diff)
downloadgnunet-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.c22
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);