aboutsummaryrefslogtreecommitdiff
path: root/src/namestore
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/namestore
parent0a8c135eedab5213b31c21b3d4b800e5f0f6041f (diff)
downloadgnunet-d080cb1ed80a0e528b2b755ee48ca18cb670175e.tar.gz
gnunet-d080cb1ed80a0e528b2b755ee48ca18cb670175e.zip
check return values from GNSRECORD_record_serialize/size always
Diffstat (limited to 'src/namestore')
-rw-r--r--src/namestore/gnunet-service-namestore.c230
-rw-r--r--src/namestore/namestore_api.c20
-rw-r--r--src/namestore/namestore_api_monitor.c7
-rw-r--r--src/namestore/plugin_namestore_flat.c16
-rw-r--r--src/namestore/plugin_namestore_postgres.c11
-rw-r--r--src/namestore/plugin_namestore_sqlite.c9
6 files changed, 206 insertions, 87 deletions
diff --git a/src/namestore/gnunet-service-namestore.c b/src/namestore/gnunet-service-namestore.c
index 8e88558de..1c73e2408 100644
--- a/src/namestore/gnunet-service-namestore.c
+++ b/src/namestore/gnunet-service-namestore.c
@@ -551,6 +551,7 @@ merge_with_nick_records (const struct GNUNET_GNSRECORD_Data *nick_rd,
551 size_t req; 551 size_t req;
552 char *data; 552 char *data;
553 size_t data_offset; 553 size_t data_offset;
554 struct GNUNET_GNSRECORD_Data *target;
554 555
555 (*rdc_res) = 1 + rd2_length; 556 (*rdc_res) = 1 + rd2_length;
556 if (0 == 1 + rd2_length) 557 if (0 == 1 + rd2_length)
@@ -560,38 +561,52 @@ merge_with_nick_records (const struct GNUNET_GNSRECORD_Data *nick_rd,
560 return; 561 return;
561 } 562 }
562 req = sizeof (struct GNUNET_GNSRECORD_Data) + nick_rd->data_size; 563 req = sizeof (struct GNUNET_GNSRECORD_Data) + nick_rd->data_size;
563 for (unsigned int c=0; c< rd2_length; c++) 564 for (unsigned int i=0; i<rd2_length; i++)
564 req += sizeof (struct GNUNET_GNSRECORD_Data) + rd2[c].data_size; 565 {
565 (*rd_res) = GNUNET_malloc (req); 566 const struct GNUNET_GNSRECORD_Data *orig = &rd2[i];
566 data = (char *) &(*rd_res)[1 + rd2_length]; 567
568 if (req + sizeof (struct GNUNET_GNSRECORD_Data) + orig->data_size < req)
569 {
570 GNUNET_break (0);
571 (*rd_res) = NULL;
572 return;
573 }
574 req += sizeof (struct GNUNET_GNSRECORD_Data) + orig->data_size;
575 }
576 target = GNUNET_malloc (req);
577 (*rd_res) = target;
578 data = (char *) &target[1 + rd2_length];
567 data_offset = 0; 579 data_offset = 0;
568 latest_expiration = 0; 580 latest_expiration = 0;
569 for (unsigned int c=0; c< rd2_length; c++) 581 for (unsigned int i=0;i<rd2_length;i++)
570 { 582 {
571 if (0 != (rd2[c].flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION)) 583 const struct GNUNET_GNSRECORD_Data *orig = &rd2[i];
584
585 if (0 != (orig->flags & GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION))
572 { 586 {
573 if ((GNUNET_TIME_absolute_get().abs_value_us + rd2[c].expiration_time) > 587 if ((GNUNET_TIME_absolute_get().abs_value_us + orig->expiration_time) >
574 latest_expiration) 588 latest_expiration)
575 latest_expiration = rd2[c].expiration_time; 589 latest_expiration = orig->expiration_time;
576 } 590 }
577 else if (rd2[c].expiration_time > latest_expiration) 591 else if (orig->expiration_time > latest_expiration)
578 latest_expiration = rd2[c].expiration_time; 592 latest_expiration = orig->expiration_time;
579 (*rd_res)[c] = rd2[c]; 593 target[i] = *orig;
580 (*rd_res)[c].data = (void *) &data[data_offset]; 594 target[i].data = (void *) &data[data_offset];
581 GNUNET_memcpy (&data[data_offset], 595 GNUNET_memcpy (&data[data_offset],
582 rd2[c].data, 596 orig->data,
583 rd2[c].data_size); 597 orig->data_size);
584 data_offset += (*rd_res)[c].data_size; 598 data_offset += orig->data_size;
585 } 599 }
586 /* append nick */ 600 /* append nick */
587 (*rd_res)[rd2_length] = *nick_rd; 601 target[rd2_length] = *nick_rd;
588 (*rd_res)[rd2_length].expiration_time = latest_expiration; 602 target[rd2_length].expiration_time = latest_expiration;
589 (*rd_res)[rd2_length].data = (void *) &data[data_offset]; 603 target[rd2_length].data = (void *) &data[data_offset];
590 GNUNET_memcpy ((void *) (*rd_res)[rd2_length].data, 604 GNUNET_memcpy (&data[data_offset],
591 nick_rd->data, 605 nick_rd->data,
592 nick_rd->data_size); 606 nick_rd->data_size);
593 data_offset += (*rd_res)[rd2_length].data_size; 607 data_offset += nick_rd->data_size;
594 GNUNET_assert (req == (sizeof (struct GNUNET_GNSRECORD_Data)) * (*rdc_res) + data_offset); 608 GNUNET_assert (req ==
609 (sizeof (struct GNUNET_GNSRECORD_Data)) * (*rdc_res) + data_offset);
595} 610}
596 611
597 612
@@ -620,11 +635,16 @@ send_lookup_response (struct NamestoreClient *nc,
620 struct GNUNET_GNSRECORD_Data *res; 635 struct GNUNET_GNSRECORD_Data *res;
621 unsigned int res_count; 636 unsigned int res_count;
622 size_t name_len; 637 size_t name_len;
623 size_t rd_ser_len; 638 ssize_t rd_ser_len;
624 char *name_tmp; 639 char *name_tmp;
625 char *rd_ser; 640 char *rd_ser;
626 641
627 nick = get_nick_record (zone_key); 642 nick = get_nick_record (zone_key);
643
644 GNUNET_assert (-1 !=
645 GNUNET_GNSRECORD_records_get_size (rd_count,
646 rd));
647
628 if ( (NULL != nick) && 648 if ( (NULL != nick) &&
629 (0 != strcmp (name, 649 (0 != strcmp (name,
630 GNUNET_GNS_EMPTY_LABEL_AT))) 650 GNUNET_GNS_EMPTY_LABEL_AT)))
@@ -643,26 +663,44 @@ send_lookup_response (struct NamestoreClient *nc,
643 res = (struct GNUNET_GNSRECORD_Data *) rd; 663 res = (struct GNUNET_GNSRECORD_Data *) rd;
644 } 664 }
645 665
666 GNUNET_assert (-1 !=
667 GNUNET_GNSRECORD_records_get_size (res_count,
668 res));
669
670
646 name_len = strlen (name) + 1; 671 name_len = strlen (name) + 1;
647 rd_ser_len = GNUNET_GNSRECORD_records_get_size (res_count, 672 rd_ser_len = GNUNET_GNSRECORD_records_get_size (res_count,
648 res); 673 res);
674 if (rd_ser_len < 0)
675 {
676 GNUNET_break (0);
677 GNUNET_SERVICE_client_drop (nc->client);
678 return;
679 }
680 if (rd_ser_len >= UINT16_MAX - name_len - sizeof (*zir_msg))
681 {
682 GNUNET_break (0);
683 GNUNET_SERVICE_client_drop (nc->client);
684 return;
685 }
649 env = GNUNET_MQ_msg_extra (zir_msg, 686 env = GNUNET_MQ_msg_extra (zir_msg,
650 name_len + rd_ser_len, 687 name_len + rd_ser_len,
651 GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT); 688 GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_RESULT);
652 zir_msg->gns_header.r_id = htonl (request_id); 689 zir_msg->gns_header.r_id = htonl (request_id);
653 zir_msg->name_len = htons (name_len); 690 zir_msg->name_len = htons (name_len);
654 zir_msg->rd_count = htons (res_count); 691 zir_msg->rd_count = htons (res_count);
655 zir_msg->rd_len = htons (rd_ser_len); 692 zir_msg->rd_len = htons ((uint16_t) rd_ser_len);
656 zir_msg->private_key = *zone_key; 693 zir_msg->private_key = *zone_key;
657 name_tmp = (char *) &zir_msg[1]; 694 name_tmp = (char *) &zir_msg[1];
658 GNUNET_memcpy (name_tmp, 695 GNUNET_memcpy (name_tmp,
659 name, 696 name,
660 name_len); 697 name_len);
661 rd_ser = &name_tmp[name_len]; 698 rd_ser = &name_tmp[name_len];
662 GNUNET_GNSRECORD_records_serialize (res_count, 699 GNUNET_assert (rd_ser_len ==
663 res, 700 GNUNET_GNSRECORD_records_serialize (res_count,
664 rd_ser_len, 701 res,
665 rd_ser); 702 rd_ser_len,
703 rd_ser));
666 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 704 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
667 "Sending RECORD_RESULT message with %u records\n", 705 "Sending RECORD_RESULT message with %u records\n",
668 res_count); 706 res_count);
@@ -1073,12 +1111,13 @@ struct RecordLookupContext
1073 /** 1111 /**
1074 * FIXME. 1112 * FIXME.
1075 */ 1113 */
1076 size_t rd_ser_len; 1114 ssize_t rd_ser_len;
1077}; 1115};
1078 1116
1079 1117
1080/** 1118/**
1081 * FIXME. 1119 * FIXME.
1120 *
1082 * @param seq sequence number of the record 1121 * @param seq sequence number of the record
1083 */ 1122 */
1084static void 1123static void
@@ -1090,60 +1129,93 @@ lookup_it (void *cls,
1090 const struct GNUNET_GNSRECORD_Data *rd) 1129 const struct GNUNET_GNSRECORD_Data *rd)
1091{ 1130{
1092 struct RecordLookupContext *rlc = cls; 1131 struct RecordLookupContext *rlc = cls;
1093 struct GNUNET_GNSRECORD_Data *rd_res;
1094 unsigned int rdc_res;
1095 1132
1096 (void) private_key; 1133 (void) private_key;
1097 (void) seq; 1134 (void) seq;
1098 if (0 == strcmp (label, 1135 if (0 != strcmp (label,
1099 rlc->label)) 1136 rlc->label))
1137 return;
1138 rlc->found = GNUNET_YES;
1139 if (0 == rd_count)
1100 { 1140 {
1101 rlc->found = GNUNET_YES; 1141 rlc->rd_ser_len = 0;
1102 if (0 != rd_count) 1142 rlc->res_rd_count = 0;
1143 rlc->res_rd = NULL;
1144 return;
1145 }
1146 if ( (NULL != rlc->nick) &&
1147 (0 != strcmp (label,
1148 GNUNET_GNS_EMPTY_LABEL_AT)) )
1149 {
1150 /* Merge */
1151 struct GNUNET_GNSRECORD_Data *rd_res;
1152 unsigned int rdc_res;
1153
1154 rd_res = NULL;
1155 rdc_res = 0;
1156 rlc->nick->flags = (rlc->nick->flags | GNUNET_GNSRECORD_RF_PRIVATE) ^ GNUNET_GNSRECORD_RF_PRIVATE;
1157 merge_with_nick_records (rlc->nick,
1158 rd_count,
1159 rd,
1160 &rdc_res,
1161 &rd_res);
1162 rlc->rd_ser_len = GNUNET_GNSRECORD_records_get_size (rdc_res,
1163 rd_res);
1164 if (rlc->rd_ser_len < 0)
1103 { 1165 {
1104 if ( (NULL != rlc->nick) && 1166 GNUNET_break (0);
1105 (0 != strcmp (label, 1167 GNUNET_free (rd_res);
1106 GNUNET_GNS_EMPTY_LABEL_AT)) ) 1168 rlc->found = GNUNET_NO;
1107 { 1169 rlc->rd_ser_len = 0;
1108 /* Merge */ 1170 return;
1109 rd_res = NULL; 1171 }
1110 rdc_res = 0; 1172 rlc->res_rd_count = rdc_res;
1111 rlc->nick->flags = (rlc->nick->flags | GNUNET_GNSRECORD_RF_PRIVATE) ^ GNUNET_GNSRECORD_RF_PRIVATE; 1173 rlc->res_rd = GNUNET_malloc (rlc->rd_ser_len);
1112 merge_with_nick_records (rlc->nick, 1174 if (rlc->rd_ser_len !=
1113 rd_count,
1114 rd,
1115 &rdc_res,
1116 &rd_res);
1117 rlc->rd_ser_len = GNUNET_GNSRECORD_records_get_size (rdc_res,
1118 rd_res);
1119 rlc->res_rd_count = rdc_res;
1120 rlc->res_rd = GNUNET_malloc (rlc->rd_ser_len);
1121 GNUNET_GNSRECORD_records_serialize (rdc_res, 1175 GNUNET_GNSRECORD_records_serialize (rdc_res,
1122 rd_res, 1176 rd_res,
1123 rlc->rd_ser_len, 1177 rlc->rd_ser_len,
1124 rlc->res_rd); 1178 rlc->res_rd))
1125 1179 {
1126 GNUNET_free (rd_res); 1180 GNUNET_break (0);
1127 GNUNET_free (rlc->nick); 1181 GNUNET_free (rlc->res_rd);
1128 rlc->nick = NULL; 1182 rlc->res_rd = NULL;
1129 } 1183 rlc->res_rd_count = 0;
1130 else 1184 rlc->rd_ser_len = 0;
1131 { 1185 GNUNET_free (rd_res);
1132 rlc->rd_ser_len = GNUNET_GNSRECORD_records_get_size (rd_count, 1186 rlc->found = GNUNET_NO;
1133 rd); 1187 return;
1134 rlc->res_rd_count = rd_count; 1188 }
1135 rlc->res_rd = GNUNET_malloc (rlc->rd_ser_len); 1189 GNUNET_free (rd_res);
1190 GNUNET_free (rlc->nick);
1191 rlc->nick = NULL;
1192 }
1193 else
1194 {
1195 rlc->rd_ser_len = GNUNET_GNSRECORD_records_get_size (rd_count,
1196 rd);
1197 if (rlc->rd_ser_len < 0)
1198 {
1199 GNUNET_break (0);
1200 rlc->found = GNUNET_NO;
1201 rlc->rd_ser_len = 0;
1202 return;
1203 }
1204 rlc->res_rd_count = rd_count;
1205 rlc->res_rd = GNUNET_malloc (rlc->rd_ser_len);
1206 if (rlc->rd_ser_len !=
1136 GNUNET_GNSRECORD_records_serialize (rd_count, 1207 GNUNET_GNSRECORD_records_serialize (rd_count,
1137 rd, 1208 rd,
1138 rlc->rd_ser_len, 1209 rlc->rd_ser_len,
1139 rlc->res_rd); 1210 rlc->res_rd))
1140 }
1141 }
1142 else
1143 { 1211 {
1144 rlc->rd_ser_len = 0; 1212 GNUNET_break (0);
1145 rlc->res_rd_count = 0; 1213 GNUNET_free (rlc->res_rd);
1146 rlc->res_rd = NULL; 1214 rlc->res_rd = NULL;
1215 rlc->res_rd_count = 0;
1216 rlc->rd_ser_len = 0;
1217 rlc->found = GNUNET_NO;
1218 return;
1147 } 1219 }
1148 } 1220 }
1149} 1221}
@@ -1479,7 +1551,7 @@ handle_zone_to_name_it (void *cls,
1479 struct ZoneToNameResponseMessage *ztnr_msg; 1551 struct ZoneToNameResponseMessage *ztnr_msg;
1480 int16_t res; 1552 int16_t res;
1481 size_t name_len; 1553 size_t name_len;
1482 size_t rd_ser_len; 1554 ssize_t rd_ser_len;
1483 size_t msg_size; 1555 size_t msg_size;
1484 char *name_tmp; 1556 char *name_tmp;
1485 char *rd_tmp; 1557 char *rd_tmp;
@@ -1490,7 +1562,14 @@ handle_zone_to_name_it (void *cls,
1490 name); 1562 name);
1491 res = GNUNET_YES; 1563 res = GNUNET_YES;
1492 name_len = (NULL == name) ? 0 : strlen (name) + 1; 1564 name_len = (NULL == name) ? 0 : strlen (name) + 1;
1493 rd_ser_len = GNUNET_GNSRECORD_records_get_size (rd_count, rd); 1565 rd_ser_len = GNUNET_GNSRECORD_records_get_size (rd_count,
1566 rd);
1567 if (rd_ser_len < 0)
1568 {
1569 GNUNET_break (0);
1570 ztn_ctx->success = GNUNET_SYSERR;
1571 return;
1572 }
1494 msg_size = sizeof (struct ZoneToNameResponseMessage) + name_len + rd_ser_len; 1573 msg_size = sizeof (struct ZoneToNameResponseMessage) + name_len + rd_ser_len;
1495 if (msg_size >= GNUNET_MAX_MESSAGE_SIZE) 1574 if (msg_size >= GNUNET_MAX_MESSAGE_SIZE)
1496 { 1575 {
@@ -1513,10 +1592,11 @@ handle_zone_to_name_it (void *cls,
1513 name, 1592 name,
1514 name_len); 1593 name_len);
1515 rd_tmp = &name_tmp[name_len]; 1594 rd_tmp = &name_tmp[name_len];
1516 GNUNET_GNSRECORD_records_serialize (rd_count, 1595 GNUNET_assert (rd_ser_len ==
1517 rd, 1596 GNUNET_GNSRECORD_records_serialize (rd_count,
1518 rd_ser_len, 1597 rd,
1519 rd_tmp); 1598 rd_ser_len,
1599 rd_tmp));
1520 ztn_ctx->success = GNUNET_OK; 1600 ztn_ctx->success = GNUNET_OK;
1521 GNUNET_MQ_send (ztn_ctx->nc->mq, 1601 GNUNET_MQ_send (ztn_ctx->nc->mq,
1522 env); 1602 env);
diff --git a/src/namestore/namestore_api.c b/src/namestore/namestore_api.c
index 57bf8f81b..f2aaa43c8 100644
--- a/src/namestore/namestore_api.c
+++ b/src/namestore/namestore_api.c
@@ -1033,7 +1033,7 @@ GNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h,
1033 struct GNUNET_MQ_Envelope *env; 1033 struct GNUNET_MQ_Envelope *env;
1034 char *name_tmp; 1034 char *name_tmp;
1035 char *rd_ser; 1035 char *rd_ser;
1036 size_t rd_ser_len; 1036 ssize_t rd_ser_len;
1037 size_t name_len; 1037 size_t name_len;
1038 uint32_t rid; 1038 uint32_t rid;
1039 struct RecordStoreMessage *msg; 1039 struct RecordStoreMessage *msg;
@@ -1045,6 +1045,18 @@ GNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h,
1045 GNUNET_break (0); 1045 GNUNET_break (0);
1046 return NULL; 1046 return NULL;
1047 } 1047 }
1048 rd_ser_len = GNUNET_GNSRECORD_records_get_size (rd_count,
1049 rd);
1050 if (rd_ser_len < 0)
1051 {
1052 GNUNET_break (0);
1053 return NULL;
1054 }
1055 if (rd_ser_len > UINT16_MAX)
1056 {
1057 GNUNET_break (0);
1058 return NULL;
1059 }
1048 rid = get_op_id (h); 1060 rid = get_op_id (h);
1049 qe = GNUNET_new (struct GNUNET_NAMESTORE_QueueEntry); 1061 qe = GNUNET_new (struct GNUNET_NAMESTORE_QueueEntry);
1050 qe->h = h; 1062 qe->h = h;
@@ -1056,8 +1068,6 @@ GNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h,
1056 qe); 1068 qe);
1057 1069
1058 /* setup msg */ 1070 /* setup msg */
1059 rd_ser_len = GNUNET_GNSRECORD_records_get_size (rd_count,
1060 rd);
1061 env = GNUNET_MQ_msg_extra (msg, 1071 env = GNUNET_MQ_msg_extra (msg,
1062 name_len + rd_ser_len, 1072 name_len + rd_ser_len,
1063 GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE); 1073 GNUNET_MESSAGE_TYPE_NAMESTORE_RECORD_STORE);
@@ -1077,8 +1087,10 @@ GNUNET_NAMESTORE_records_store (struct GNUNET_NAMESTORE_Handle *h,
1077 rd, 1087 rd,
1078 rd_ser_len, 1088 rd_ser_len,
1079 rd_ser); 1089 rd_ser);
1080 if (0 > sret) 1090 if ( (0 > sret) ||
1091 (sret != rd_ser_len) )
1081 { 1092 {
1093 GNUNET_break (0);
1082 GNUNET_free (env); 1094 GNUNET_free (env);
1083 return NULL; 1095 return NULL;
1084 } 1096 }
diff --git a/src/namestore/namestore_api_monitor.c b/src/namestore/namestore_api_monitor.c
index 9ba90833b..16780ad0c 100644
--- a/src/namestore/namestore_api_monitor.c
+++ b/src/namestore/namestore_api_monitor.c
@@ -144,6 +144,11 @@ check_result (void *cls,
144 rd_len = ntohs (lrm->rd_len); 144 rd_len = ntohs (lrm->rd_len);
145 rd_count = ntohs (lrm->rd_count); 145 rd_count = ntohs (lrm->rd_count);
146 name_len = ntohs (lrm->name_len); 146 name_len = ntohs (lrm->name_len);
147 if (name_len > MAX_NAME_LEN)
148 {
149 GNUNET_break (0);
150 return GNUNET_SYSERR;
151 }
147 exp_lrm_len = sizeof (struct RecordResultMessage) + name_len + rd_len; 152 exp_lrm_len = sizeof (struct RecordResultMessage) + name_len + rd_len;
148 if (lrm_len != exp_lrm_len) 153 if (lrm_len != exp_lrm_len)
149 { 154 {
@@ -156,7 +161,7 @@ check_result (void *cls,
156 return GNUNET_SYSERR; 161 return GNUNET_SYSERR;
157 } 162 }
158 name_tmp = (const char *) &lrm[1]; 163 name_tmp = (const char *) &lrm[1];
159 if ((name_tmp[name_len -1] != '\0') || (name_len > MAX_NAME_LEN)) 164 if (name_tmp[name_len -1] != '\0')
160 { 165 {
161 GNUNET_break (0); 166 GNUNET_break (0);
162 return GNUNET_SYSERR; 167 return GNUNET_SYSERR;
diff --git a/src/namestore/plugin_namestore_flat.c b/src/namestore/plugin_namestore_flat.c
index 35d8424b4..95edb9d87 100644
--- a/src/namestore/plugin_namestore_flat.c
+++ b/src/namestore/plugin_namestore_flat.c
@@ -301,7 +301,7 @@ store_and_free_entries (void *cls,
301 char *line; 301 char *line;
302 char *zone_private_key; 302 char *zone_private_key;
303 char *record_data_b64; 303 char *record_data_b64;
304 size_t data_size; 304 ssize_t data_size;
305 305
306 (void) key; 306 (void) key;
307 GNUNET_STRINGS_base64_encode ((char*)entry->private_key, 307 GNUNET_STRINGS_base64_encode ((char*)entry->private_key,
@@ -309,6 +309,18 @@ store_and_free_entries (void *cls,
309 &zone_private_key); 309 &zone_private_key);
310 data_size = GNUNET_GNSRECORD_records_get_size (entry->record_count, 310 data_size = GNUNET_GNSRECORD_records_get_size (entry->record_count,
311 entry->record_data); 311 entry->record_data);
312 if (data_size < 0)
313 {
314 GNUNET_break (0);
315 GNUNET_free (zone_private_key);
316 return GNUNET_SYSERR;
317 }
318 if (data_size >= UINT16_MAX)
319 {
320 GNUNET_break (0);
321 GNUNET_free (zone_private_key);
322 return GNUNET_SYSERR;
323 }
312 { 324 {
313 char data[data_size]; 325 char data[data_size];
314 ssize_t ret; 326 ssize_t ret;
@@ -318,7 +330,7 @@ store_and_free_entries (void *cls,
318 data_size, 330 data_size,
319 data); 331 data);
320 if ( (ret < 0) || 332 if ( (ret < 0) ||
321 (data_size != (size_t) ret) ) 333 (data_size != ret) )
322 { 334 {
323 GNUNET_break (0); 335 GNUNET_break (0);
324 GNUNET_free (zone_private_key); 336 GNUNET_free (zone_private_key);
diff --git a/src/namestore/plugin_namestore_postgres.c b/src/namestore/plugin_namestore_postgres.c
index d7907b1a6..09fdd760f 100644
--- a/src/namestore/plugin_namestore_postgres.c
+++ b/src/namestore/plugin_namestore_postgres.c
@@ -220,7 +220,7 @@ namestore_postgres_store_records (void *cls,
220 struct GNUNET_CRYPTO_EcdsaPublicKey pkey; 220 struct GNUNET_CRYPTO_EcdsaPublicKey pkey;
221 uint64_t rvalue; 221 uint64_t rvalue;
222 uint32_t rd_count32 = (uint32_t) rd_count; 222 uint32_t rd_count32 = (uint32_t) rd_count;
223 size_t data_size; 223 ssize_t data_size;
224 224
225 memset (&pkey, 225 memset (&pkey,
226 0, 226 0,
@@ -238,7 +238,12 @@ namestore_postgres_store_records (void *cls,
238 UINT64_MAX); 238 UINT64_MAX);
239 data_size = GNUNET_GNSRECORD_records_get_size (rd_count, 239 data_size = GNUNET_GNSRECORD_records_get_size (rd_count,
240 rd); 240 rd);
241 if (data_size > 64 * 65536) 241 if (data_size < 0)
242 {
243 GNUNET_break (0);
244 return GNUNET_SYSERR;
245 }
246 if (data_size >= UINT16_MAX)
242 { 247 {
243 GNUNET_break (0); 248 GNUNET_break (0);
244 return GNUNET_SYSERR; 249 return GNUNET_SYSERR;
@@ -287,7 +292,7 @@ namestore_postgres_store_records (void *cls,
287 data_size, 292 data_size,
288 data); 293 data);
289 if ( (ret < 0) || 294 if ( (ret < 0) ||
290 (data_size != (size_t) ret) ) 295 (data_size != ret) )
291 { 296 {
292 GNUNET_break (0); 297 GNUNET_break (0);
293 return GNUNET_SYSERR; 298 return GNUNET_SYSERR;
diff --git a/src/namestore/plugin_namestore_sqlite.c b/src/namestore/plugin_namestore_sqlite.c
index 34e548613..81391ce8a 100644
--- a/src/namestore/plugin_namestore_sqlite.c
+++ b/src/namestore/plugin_namestore_sqlite.c
@@ -313,7 +313,7 @@ namestore_sqlite_store_records (void *cls,
313 int n; 313 int n;
314 struct GNUNET_CRYPTO_EcdsaPublicKey pkey; 314 struct GNUNET_CRYPTO_EcdsaPublicKey pkey;
315 uint64_t rvalue; 315 uint64_t rvalue;
316 size_t data_size; 316 ssize_t data_size;
317 317
318 memset (&pkey, 318 memset (&pkey,
319 0, 319 0,
@@ -332,6 +332,11 @@ namestore_sqlite_store_records (void *cls,
332 UINT64_MAX); 332 UINT64_MAX);
333 data_size = GNUNET_GNSRECORD_records_get_size (rd_count, 333 data_size = GNUNET_GNSRECORD_records_get_size (rd_count,
334 rd); 334 rd);
335 if (data_size < 0)
336 {
337 GNUNET_break (0);
338 return GNUNET_SYSERR;
339 }
335 if (data_size > 64 * 65536) 340 if (data_size > 64 * 65536)
336 { 341 {
337 GNUNET_break (0); 342 GNUNET_break (0);
@@ -352,7 +357,7 @@ namestore_sqlite_store_records (void *cls,
352 data_size, 357 data_size,
353 data); 358 data);
354 if ( (ret < 0) || 359 if ( (ret < 0) ||
355 (data_size != (size_t) ret) ) 360 (data_size != ret) )
356 { 361 {
357 GNUNET_break (0); 362 GNUNET_break (0);
358 return GNUNET_SYSERR; 363 return GNUNET_SYSERR;