aboutsummaryrefslogtreecommitdiff
path: root/src/fs
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-01-24 10:52:19 +0000
committerChristian Grothoff <christian@grothoff.org>2013-01-24 10:52:19 +0000
commit68953a2747692e86cd6d3eb49abf457904768529 (patch)
tree34bc0472832f4132d81bac6b104657e4b98e1ab1 /src/fs
parentf1649b1c350008f59a99051c5cfefe8ce998b2f3 (diff)
downloadgnunet-68953a2747692e86cd6d3eb49abf457904768529.tar.gz
gnunet-68953a2747692e86cd6d3eb49abf457904768529.zip
-fix #2743
Diffstat (limited to 'src/fs')
-rw-r--r--src/fs/fs_namespace.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/src/fs/fs_namespace.c b/src/fs/fs_namespace.c
index eaff8a6d2..5c16ea4ae 100644
--- a/src/fs/fs_namespace.c
+++ b/src/fs/fs_namespace.c
@@ -544,27 +544,36 @@ GNUNET_FS_publish_sks (struct GNUNET_FS_Handle *h,
544 struct GNUNET_HashCode id; /* hash of hc = identifier */ 544 struct GNUNET_HashCode id; /* hash of hc = identifier */
545 struct GNUNET_HashCode query; /* id ^ nsid = DB query */ 545 struct GNUNET_HashCode query; /* id ^ nsid = DB query */
546 546
547 if (NULL == meta)
548 mmeta = GNUNET_CONTAINER_meta_data_create ();
549 else
550 mmeta = GNUNET_CONTAINER_meta_data_duplicate (meta);
551 uris = GNUNET_FS_uri_to_string (uri);
552 slen = strlen (uris) + 1;
553 idlen = strlen (identifier); 547 idlen = strlen (identifier);
554 if (NULL != update) 548 if (NULL != update)
555 nidlen = strlen (update) + 1; 549 nidlen = strlen (update) + 1;
556 else 550 else
557 nidlen = 1; 551 nidlen = 1;
552 uris = GNUNET_FS_uri_to_string (uri);
553 slen = strlen (uris) + 1;
554 if ( (slen >= MAX_SBLOCK_SIZE - sizeof (struct SBlock)) ||
555 (nidlen >= MAX_SBLOCK_SIZE - sizeof (struct SBlock) - slen) )
556 {
557 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
558 _("Identifiers or URI too long to create SBlock"));
559 GNUNET_free (uris);
560 return NULL;
561 }
562 if (NULL == meta)
563 mmeta = GNUNET_CONTAINER_meta_data_create ();
564 else
565 mmeta = GNUNET_CONTAINER_meta_data_duplicate (meta);
558 mdsize = GNUNET_CONTAINER_meta_data_get_serialized_size (mmeta); 566 mdsize = GNUNET_CONTAINER_meta_data_get_serialized_size (mmeta);
559 size = sizeof (struct SBlock) + slen + nidlen + mdsize; 567 size = sizeof (struct SBlock) + slen + nidlen + mdsize;
560 if (size > MAX_SBLOCK_SIZE) 568 if ( (size > MAX_SBLOCK_SIZE) ||
569 (size < sizeof (struct SBlock) + slen + nidlen) )
561 { 570 {
562 size = MAX_SBLOCK_SIZE; 571 size = MAX_SBLOCK_SIZE;
563 mdsize = size - (sizeof (struct SBlock) + slen + nidlen); 572 mdsize = MAX_SBLOCK_SIZE - (sizeof (struct SBlock) + slen + nidlen);
564 } 573 }
565 sb = GNUNET_malloc (sizeof (struct SBlock) + size); 574 sb = GNUNET_malloc (sizeof (struct SBlock) + size);
566 dest = (char *) &sb[1]; 575 dest = (char *) &sb[1];
567 if (update != NULL) 576 if (NULL != update)
568 memcpy (dest, update, nidlen); 577 memcpy (dest, update, nidlen);
569 else 578 else
570 memset (dest, 0, 1); 579 memset (dest, 0, 1);