Added SilcStack support to SILC Hash Table API.
[silc.git] / lib / silcutil / silcmime.c
index f719e77961694509b9868e4dd8c4b966576315bd..6afc48f9be17d658cff6bf8a3c4be1276b93d9b0 100644 (file)
@@ -59,7 +59,7 @@ SilcMime silc_mime_alloc(void)
   if (!mime)
     return NULL;
 
-  mime->fields = silc_hash_table_alloc(0, silc_hash_string, mime,
+  mime->fields = silc_hash_table_alloc(NULL, 0, silc_hash_string, mime,
                                       silc_hash_string_compare, mime,
                                       silc_mime_field_dest, mime, TRUE);
   if (!mime->fields) {
@@ -102,7 +102,7 @@ SilcMimeAssembler silc_mime_assembler_alloc(void)
     return NULL;
 
   assembler->fragments =
-    silc_hash_table_alloc(0, silc_hash_string, NULL,
+    silc_hash_table_alloc(NULL, 0, silc_hash_string, NULL,
                          silc_hash_string_compare, NULL,
                          silc_mime_assembler_dest, assembler, TRUE);
   if (!assembler->fragments) {
@@ -198,6 +198,7 @@ SilcMime silc_mime_decode(SilcMime mime, const unsigned char *data,
   if (field && strstr(field, "multipart")) {
     char b[1024];
     SilcMime p;
+    unsigned int len;
 
     mime->multiparts = silc_dlist_init();
     if (!mime->multiparts)
@@ -213,7 +214,10 @@ SilcMime silc_mime_decode(SilcMime mime, const unsigned char *data,
     if (!strchr(field, ';'))
       goto err;
     memset(b, 0, sizeof(b));
-    strncat(b, value, strchr(field, ';') - value);
+    len = (unsigned int)(strchr(field, ';') - value);
+    if (len > sizeof(b) - 1)
+      goto err;
+    strncpy(b, value, len);
     if (strchr(b, '"'))
       *strchr(b, '"') = '\0';
     mime->multitype = silc_memdup(b, strlen(b));
@@ -464,7 +468,7 @@ SilcMime silc_mime_assemble(SilcMimeAssembler assembler, SilcMime partial)
   if (!silc_hash_table_find(assembler->fragments, (void *)id,
                            NULL, (void *)&f)) {
     /* This is new fragment to new message.  Add to hash table and return. */
-    f = silc_hash_table_alloc(0, silc_hash_uint, NULL, NULL, NULL,
+    f = silc_hash_table_alloc(NULL, 0, silc_hash_uint, NULL, NULL, NULL,
                              silc_mime_assemble_dest, NULL, TRUE);
     if (!f)
         goto err;