diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-05-20 23:40:20 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-05-20 23:40:20 +0200 |
commit | d080cb1ed80a0e528b2b755ee48ca18cb670175e (patch) | |
tree | d8c0edab6035e4d38138b303566e972fbf8b8c5f /src/namestore/namestore_api.c | |
parent | 0a8c135eedab5213b31c21b3d4b800e5f0f6041f (diff) | |
download | gnunet-d080cb1ed80a0e528b2b755ee48ca18cb670175e.tar.gz gnunet-d080cb1ed80a0e528b2b755ee48ca18cb670175e.zip |
check return values from GNSRECORD_record_serialize/size always
Diffstat (limited to 'src/namestore/namestore_api.c')
-rw-r--r-- | src/namestore/namestore_api.c | 20 |
1 files changed, 16 insertions, 4 deletions
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 | } |