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) {
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) {
if (field && strstr(field, "multipart")) {
char b[1024];
SilcMime p;
+ unsigned int len;
mime->multiparts = silc_dlist_init();
if (!mime->multiparts)
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));
if (silc_buffer_len(&buf)) {
silc_buffer_put(buffer, buf.head, silc_buffer_len(&buf));
silc_buffer_pull(buffer, silc_buffer_len(&buf));
+ silc_buffer_purge(&buf);
}
/* Add data */
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;