diff options
author | Ji Lu <jilu@140774ce-b5e7-0310-ab8b-a85725594a96> | 2009-11-12 11:55:45 +0000 |
---|---|---|
committer | Ji Lu <jilu@140774ce-b5e7-0310-ab8b-a85725594a96> | 2009-11-12 11:55:45 +0000 |
commit | d0f0a63e2db38d1f2edfe3ef51d625eb4c8e8711 (patch) | |
tree | 8d368f25a54ebe4e08628a62442870adb587ccf6 /src/util/pseudonym.c | |
parent | 6f3c4c19d2813158e974883f01026e13361b062b (diff) | |
download | gnunet-d0f0a63e2db38d1f2edfe3ef51d625eb4c8e8711.tar.gz gnunet-d0f0a63e2db38d1f2edfe3ef51d625eb4c8e8711.zip |
fixed all null problems
Diffstat (limited to 'src/util/pseudonym.c')
-rw-r--r-- | src/util/pseudonym.c | 131 |
1 files changed, 21 insertions, 110 deletions
diff --git a/src/util/pseudonym.c b/src/util/pseudonym.c index 0465b1b2c..bc7229c72 100644 --- a/src/util/pseudonym.c +++ b/src/util/pseudonym.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include "gnunet_container_lib.h" | 29 | #include "gnunet_container_lib.h" |
30 | #include "gnunet_disk_lib.h" | 30 | #include "gnunet_disk_lib.h" |
31 | #include "gnunet_pseudonym_lib.h" | 31 | #include "gnunet_pseudonym_lib.h" |
32 | #include "gnunet_bio_lib.h" | ||
32 | 33 | ||
33 | /** | 34 | /** |
34 | * FIXME | 35 | * FIXME |
@@ -175,46 +176,18 @@ write_pseudonym_info (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
175 | const struct GNUNET_CONTAINER_MetaData *meta, | 176 | const struct GNUNET_CONTAINER_MetaData *meta, |
176 | int32_t ranking, const char *ns_name) | 177 | int32_t ranking, const char *ns_name) |
177 | { | 178 | { |
178 | size_t size; | ||
179 | size_t tag; | ||
180 | size_t off; | ||
181 | char *buf; | ||
182 | char *fn; | 179 | char *fn; |
183 | 180 | ||
184 | fn = get_data_filename (cfg, PS_METADATA_DIR, nsid); | 181 | fn = get_data_filename (cfg, PS_METADATA_DIR, nsid); |
185 | GNUNET_assert (fn != NULL); | 182 | GNUNET_assert (fn != NULL); |
186 | size = GNUNET_CONTAINER_meta_data_get_serialized_size (meta, | 183 | struct GNUNET_BIO_WriteHandle *fileW; |
187 | GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL); | 184 | fileW = GNUNET_BIO_write_open(fn); |
188 | tag = size + sizeof (int32_t) + 1; | 185 | GNUNET_assert (NULL != fileW); |
189 | off = 0; | 186 | GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_int32(fileW, ranking)); |
190 | if (ns_name != NULL) | 187 | GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_string(fileW, ns_name)); |
191 | { | 188 | GNUNET_assert (GNUNET_OK == GNUNET_BIO_write_meta_data(fileW, meta)); |
192 | off = strlen (ns_name); | 189 | GNUNET_assert(GNUNET_OK == GNUNET_BIO_write_close(fileW)); |
193 | tag += off; | ||
194 | } | ||
195 | buf = GNUNET_malloc (tag); | ||
196 | ((int32_t *) buf)[0] = htonl (ranking); /* ranking */ | ||
197 | if (ns_name != NULL) | ||
198 | { | ||
199 | memcpy (&buf[sizeof (int32_t)], ns_name, off + 1); | ||
200 | } | ||
201 | else | ||
202 | { | ||
203 | buf[sizeof (int)] = '\0'; | ||
204 | } | ||
205 | GNUNET_assert | ||
206 | (size == GNUNET_CONTAINER_meta_data_serialize (meta, | ||
207 | &buf[sizeof | ||
208 | (int32_t) + | ||
209 | off + 1], | ||
210 | size, | ||
211 | GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL)); | ||
212 | GNUNET_break | ||
213 | (tag == GNUNET_DISK_fn_write (fn, buf, tag, GNUNET_DISK_PERM_USER_READ | ||
214 | | GNUNET_DISK_PERM_USER_WRITE | | ||
215 | GNUNET_DISK_PERM_GROUP_READ)); | ||
216 | GNUNET_free (fn); | 190 | GNUNET_free (fn); |
217 | GNUNET_free (buf); | ||
218 | /* create entry for pseudonym name in names */ | 191 | /* create entry for pseudonym name in names */ |
219 | GNUNET_free_non_null (GNUNET_PSEUDONYM_id_to_name (cfg, nsid)); | 192 | GNUNET_free_non_null (GNUNET_PSEUDONYM_id_to_name (cfg, nsid)); |
220 | } | 193 | } |
@@ -229,84 +202,19 @@ read_info (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
229 | struct GNUNET_CONTAINER_MetaData **meta, | 202 | struct GNUNET_CONTAINER_MetaData **meta, |
230 | int32_t * ranking, char **ns_name) | 203 | int32_t * ranking, char **ns_name) |
231 | { | 204 | { |
232 | uint64_t len; | ||
233 | size_t size; | ||
234 | size_t zend; | ||
235 | struct stat sbuf; | ||
236 | char *buf; | ||
237 | char *fn; | 205 | char *fn; |
206 | char *emsg; | ||
238 | 207 | ||
239 | if (meta != NULL) | ||
240 | *meta = NULL; | ||
241 | if (ns_name != NULL) | ||
242 | *ns_name = NULL; | ||
243 | fn = get_data_filename (cfg, PS_METADATA_DIR, nsid); | 208 | fn = get_data_filename (cfg, PS_METADATA_DIR, nsid); |
244 | GNUNET_assert (fn != NULL); | 209 | GNUNET_assert (fn != NULL); |
245 | 210 | struct GNUNET_BIO_ReadHandle *fileR; | |
246 | if ((0 != STAT (fn, &sbuf)) | 211 | fileR = GNUNET_BIO_read_open(fn); |
247 | || (GNUNET_OK != GNUNET_DISK_file_size (fn, &len, GNUNET_YES))) | 212 | GNUNET_assert (NULL != fileR); |
248 | { | 213 | GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_int32__(fileR, "Read int32 error!", ranking)); |
249 | GNUNET_free (fn); | 214 | GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_string(fileR, "Read string error!", ns_name, 200)); |
250 | return GNUNET_SYSERR; | 215 | GNUNET_assert (GNUNET_OK == GNUNET_BIO_read_meta_data(fileR, "Read meta data error!", meta)); |
251 | } | 216 | GNUNET_assert(GNUNET_OK == GNUNET_BIO_read_close(fileR, &emsg)); |
252 | if (len <= sizeof (int32_t) + 1) | ||
253 | { | ||
254 | GNUNET_free (fn); | ||
255 | return GNUNET_SYSERR; | ||
256 | } | ||
257 | if (len > 16 * 1024 * 1024) | ||
258 | { | ||
259 | /* too big, must be invalid! remove! */ | ||
260 | GNUNET_break (0); | ||
261 | if (0 != UNLINK (fn)) | ||
262 | GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "unlink", fn); | ||
263 | GNUNET_free (fn); | ||
264 | return GNUNET_SYSERR; | ||
265 | } | ||
266 | buf = GNUNET_malloc (len); | ||
267 | if (len != GNUNET_DISK_fn_read (fn, buf, len)) | ||
268 | { | ||
269 | GNUNET_free (buf); | ||
270 | GNUNET_free (fn); | ||
271 | return GNUNET_SYSERR; | ||
272 | } | ||
273 | if (ranking != NULL) | ||
274 | *ranking = ntohl (((int32_t *) buf)[0]); | ||
275 | zend = sizeof (int32_t); | ||
276 | while ((zend < len) && (buf[zend] != '\0')) | ||
277 | zend++; | ||
278 | if (zend == len) | ||
279 | { | ||
280 | GNUNET_free (buf); | ||
281 | GNUNET_free (fn); | ||
282 | return GNUNET_SYSERR; | ||
283 | } | ||
284 | if (ns_name != NULL) | ||
285 | { | ||
286 | if (zend != sizeof (int32_t)) | ||
287 | *ns_name = GNUNET_strdup (&buf[sizeof (int32_t)]); | ||
288 | else | ||
289 | *ns_name = NULL; | ||
290 | } | ||
291 | zend++; | ||
292 | size = len - zend; | ||
293 | if (meta != NULL) | ||
294 | { | ||
295 | *meta = GNUNET_CONTAINER_meta_data_deserialize (&buf[zend], size); | ||
296 | if ((*meta) == NULL) | ||
297 | { | ||
298 | /* invalid data! remove! */ | ||
299 | GNUNET_break (0); | ||
300 | if (0 != UNLINK (fn)) | ||
301 | GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, | ||
302 | "unlink", fn); | ||
303 | GNUNET_free (buf); | ||
304 | GNUNET_free (fn); | ||
305 | return GNUNET_SYSERR; | ||
306 | } | ||
307 | } | ||
308 | GNUNET_free (fn); | 217 | GNUNET_free (fn); |
309 | GNUNET_free (buf); | ||
310 | return GNUNET_OK; | 218 | return GNUNET_OK; |
311 | } | 219 | } |
312 | 220 | ||
@@ -333,10 +241,12 @@ GNUNET_PSEUDONYM_id_to_name (const struct GNUNET_CONFIGURATION_Handle *cfg, | |||
333 | unsigned int idx; | 241 | unsigned int idx; |
334 | char *ret; | 242 | char *ret; |
335 | struct stat sbuf; | 243 | struct stat sbuf; |
244 | int32_t temp = 0; | ||
245 | int32_t *rank = &temp; | ||
336 | 246 | ||
337 | meta = NULL; | 247 | meta = NULL; |
338 | name = NULL; | 248 | name = NULL; |
339 | if (GNUNET_OK == read_info (cfg, nsid, &meta, NULL, &name)) | 249 | if (GNUNET_OK == read_info (cfg, nsid, &meta, rank, &name)) |
340 | { | 250 | { |
341 | if ((meta != NULL) && (name == NULL)) | 251 | if ((meta != NULL) && (name == NULL)) |
342 | name = GNUNET_CONTAINER_meta_data_get_first_by_types (meta, | 252 | name = GNUNET_CONTAINER_meta_data_get_first_by_types (meta, |
@@ -493,6 +403,7 @@ list_pseudonym_helper (void *cls, const char *fullname) | |||
493 | int rating; | 403 | int rating; |
494 | struct GNUNET_CONTAINER_MetaData *meta; | 404 | struct GNUNET_CONTAINER_MetaData *meta; |
495 | const char *fn; | 405 | const char *fn; |
406 | const char *str = "not null"; | ||
496 | 407 | ||
497 | if (strlen (fullname) < sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)) | 408 | if (strlen (fullname) < sizeof (struct GNUNET_CRYPTO_HashAsciiEncoded)) |
498 | return GNUNET_OK; | 409 | return GNUNET_OK; |
@@ -504,7 +415,7 @@ list_pseudonym_helper (void *cls, const char *fullname) | |||
504 | ret = GNUNET_OK; | 415 | ret = GNUNET_OK; |
505 | if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string (fn, &id)) | 416 | if (GNUNET_OK != GNUNET_CRYPTO_hash_from_string (fn, &id)) |
506 | return GNUNET_OK; /* invalid name */ | 417 | return GNUNET_OK; /* invalid name */ |
507 | if (GNUNET_OK != read_info (c->cfg, &id, &meta, &rating, NULL)) | 418 | if (GNUNET_OK != read_info (c->cfg, &id, &meta, &rating, &str)) |
508 | return GNUNET_OK; /* ignore entry */ | 419 | return GNUNET_OK; /* ignore entry */ |
509 | if (c->iterator != NULL) | 420 | if (c->iterator != NULL) |
510 | ret = c->iterator (c->closure, &id, meta, rating); | 421 | ret = c->iterator (c->closure, &id, meta, rating); |