diff options
author | xrs <xrs@mail36.net> | 2018-06-25 16:53:01 +0200 |
---|---|---|
committer | xrs <xrs@mail36.net> | 2018-06-25 16:53:01 +0200 |
commit | b96052f1d3b8bb05f1868bd809fcb6e4f6569a4c (patch) | |
tree | d70c5939cc99d43e29ce63a4faa9ef334de0c81d /src/gnsrecord | |
parent | 8405df1e1968b92d38e8bcebeee1471444410d97 (diff) | |
parent | 1c9e2fc460acce152ab6374b14b1e231ac455f57 (diff) | |
download | gnunet-b96052f1d3b8bb05f1868bd809fcb6e4f6569a4c.tar.gz gnunet-b96052f1d3b8bb05f1868bd809fcb6e4f6569a4c.zip |
Merge branch 'master' of ssh://gnunet.org/gnunet
Diffstat (limited to 'src/gnsrecord')
-rw-r--r-- | src/gnsrecord/gnsrecord_serialization.c | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/src/gnsrecord/gnsrecord_serialization.c b/src/gnsrecord/gnsrecord_serialization.c index adbf02755..934d36102 100644 --- a/src/gnsrecord/gnsrecord_serialization.c +++ b/src/gnsrecord/gnsrecord_serialization.c | |||
@@ -90,6 +90,9 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count, | |||
90 | { | 90 | { |
91 | size_t ret; | 91 | size_t ret; |
92 | 92 | ||
93 | if (0 == rd_count) | ||
94 | return 0; | ||
95 | |||
93 | ret = sizeof (struct NetworkRecord) * rd_count; | 96 | ret = sizeof (struct NetworkRecord) * rd_count; |
94 | for (unsigned int i=0;i<rd_count;i++) | 97 | for (unsigned int i=0;i<rd_count;i++) |
95 | { | 98 | { |
@@ -120,6 +123,21 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count, | |||
120 | GNUNET_break (0); | 123 | GNUNET_break (0); |
121 | return -1; | 124 | return -1; |
122 | } | 125 | } |
126 | //Do not pad PKEY | ||
127 | if (GNUNET_GNSRECORD_TYPE_PKEY == rd->record_type) | ||
128 | return ret; | ||
129 | /** | ||
130 | * Efficiently round up to the next | ||
131 | * power of 2 for padding | ||
132 | * https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 | ||
133 | */ | ||
134 | ret--; | ||
135 | ret |= ret >> 1; | ||
136 | ret |= ret >> 2; | ||
137 | ret |= ret >> 4; | ||
138 | ret |= ret >> 8; | ||
139 | ret |= ret >> 16; | ||
140 | ret++; | ||
123 | return (ssize_t) ret; | 141 | return (ssize_t) ret; |
124 | } | 142 | } |
125 | 143 | ||
@@ -135,9 +153,9 @@ GNUNET_GNSRECORD_records_get_size (unsigned int rd_count, | |||
135 | */ | 153 | */ |
136 | ssize_t | 154 | ssize_t |
137 | GNUNET_GNSRECORD_records_serialize (unsigned int rd_count, | 155 | GNUNET_GNSRECORD_records_serialize (unsigned int rd_count, |
138 | const struct GNUNET_GNSRECORD_Data *rd, | 156 | const struct GNUNET_GNSRECORD_Data *rd, |
139 | size_t dest_size, | 157 | size_t dest_size, |
140 | char *dest) | 158 | char *dest) |
141 | { | 159 | { |
142 | struct NetworkRecord rec; | 160 | struct NetworkRecord rec; |
143 | size_t off; | 161 | size_t off; |
@@ -190,7 +208,10 @@ GNUNET_GNSRECORD_records_serialize (unsigned int rd_count, | |||
190 | } | 208 | } |
191 | #endif | 209 | #endif |
192 | } | 210 | } |
193 | return off; | 211 | memset (&dest[off], |
212 | 0, | ||
213 | dest_size-off); | ||
214 | return dest_size; | ||
194 | } | 215 | } |
195 | 216 | ||
196 | 217 | ||
@@ -205,9 +226,9 @@ GNUNET_GNSRECORD_records_serialize (unsigned int rd_count, | |||
205 | */ | 226 | */ |
206 | int | 227 | int |
207 | GNUNET_GNSRECORD_records_deserialize (size_t len, | 228 | GNUNET_GNSRECORD_records_deserialize (size_t len, |
208 | const char *src, | 229 | const char *src, |
209 | unsigned int rd_count, | 230 | unsigned int rd_count, |
210 | struct GNUNET_GNSRECORD_Data *dest) | 231 | struct GNUNET_GNSRECORD_Data *dest) |
211 | { | 232 | { |
212 | struct NetworkRecord rec; | 233 | struct NetworkRecord rec; |
213 | size_t off; | 234 | size_t off; |