X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcmime.c;h=14fde956f14e7b2379ca973d535294ca5e1acc24;hb=9905799a86c606304fd7df2cd401de1740a272a1;hp=211b36c3b8dfecb858f85805c225fcfcffd2480b;hpb=3a4359b248742c4d08d00c06badcb346d4a19528;p=silc.git diff --git a/lib/silcutil/silcmime.c b/lib/silcutil/silcmime.c index 211b36c3..14fde956 100644 --- a/lib/silcutil/silcmime.c +++ b/lib/silcutil/silcmime.c @@ -229,10 +229,10 @@ SilcMime silc_mime_decode(SilcMime mime, const unsigned char *data, line = strdup(value); if (strrchr(line, '"')) { *strrchr(line, '"') = '\0'; - snprintf(b, sizeof(b) - 1, "--%s", line + 1); + silc_silc_snprintf(b, sizeof(b) - 1, "--%s", line + 1); mime->boundary = strdup(line + 1); } else { - snprintf(b, sizeof(b) - 1, "--%s", line); + silc_silc_snprintf(b, sizeof(b) - 1, "--%s", line); mime->boundary = strdup(line); } silc_free(line); @@ -282,11 +282,14 @@ SilcMime silc_mime_decode(SilcMime mime, const unsigned char *data, } } } else { - /* Get data area */ - if (i >= data_len) + /* Get data area. If we are at the end and we have fields present + there is no data area present, but, if fields are not present we + only have data area. */ + if (i >= data_len && !silc_hash_table_count(mime->fields)) i = 0; SILC_LOG_DEBUG(("Data len %d", data_len - i)); - silc_mime_add_data(mime, tmp + i, data_len - i); + if (data_len - i) + silc_mime_add_data(mime, tmp + i, data_len - i); } return mime; @@ -322,7 +325,7 @@ unsigned char *silc_mime_encode(SilcMime mime, SilcUInt32 *encoded_len) while (silc_hash_table_get(&htl, (void **)&field, (void **)&value)) { memset(tmp, 0, sizeof(tmp)); SILC_LOG_DEBUG(("Header %s: %s", field, value)); - snprintf(tmp, sizeof(tmp) - 1, "%s: %s\r\n", field, value); + silc_silc_snprintf(tmp, sizeof(tmp) - 1, "%s: %s\r\n", field, value); silc_buffer_strformat(&buf, tmp, SILC_STRFMT_END); i++; } @@ -367,8 +370,8 @@ unsigned char *silc_mime_encode(SilcMime mime, SilcUInt32 *encoded_len) /* If fields are not present, add extra CRLF */ if (!silc_hash_table_count(part->fields)) - snprintf(tmp2, sizeof(tmp2) - 1, "\r\n"); - snprintf(tmp, sizeof(tmp) - 1, "%s--%s\r\n%s", + silc_silc_snprintf(tmp2, sizeof(tmp2) - 1, "\r\n"); + silc_silc_snprintf(tmp, sizeof(tmp) - 1, "%s--%s\r\n%s", i != 0 ? "\r\n" : "", mime->boundary, tmp2); i = 1; @@ -384,7 +387,7 @@ unsigned char *silc_mime_encode(SilcMime mime, SilcUInt32 *encoded_len) } memset(tmp, 0, sizeof(tmp)); - snprintf(tmp, sizeof(tmp) - 1, "\r\n--%s--\r\n", mime->boundary); + silc_silc_snprintf(tmp, sizeof(tmp) - 1, "\r\n--%s--\r\n", mime->boundary); buffer = silc_buffer_realloc(buffer, silc_buffer_truelen(buffer) + strlen(tmp)); if (!buffer) @@ -575,7 +578,7 @@ SilcDList silc_mime_encode_partial(SilcMime mime, int max_size) memset(type, 0, sizeof(type)); gethostname(type, sizeof(type) - 1); srand((time(NULL) + buf_len) ^ rand()); - snprintf(id, sizeof(id) - 1, "%X%X%X%s", + silc_silc_snprintf(id, sizeof(id) - 1, "%X%X%X%s", (unsigned int)rand(), (unsigned int)time(NULL), (unsigned int)buf_len, type); @@ -587,7 +590,7 @@ SilcDList silc_mime_encode_partial(SilcMime mime, int max_size) silc_mime_add_field(partial, "MIME-Version", "1.0"); memset(type, 0, sizeof(type)); - snprintf(type, sizeof(type) - 1, + silc_silc_snprintf(type, sizeof(type) - 1, "message/partial; id=\"%s\"; number=1", id); silc_mime_add_field(partial, "Content-Type", type); silc_mime_add_data(partial, buf, max_size); @@ -617,14 +620,14 @@ SilcDList silc_mime_encode_partial(SilcMime mime, int max_size) silc_mime_add_field(partial, "MIME-Version", "1.0"); if (len > max_size) { - snprintf(type, sizeof(type) - 1, + silc_silc_snprintf(type, sizeof(type) - 1, "message/partial; id=\"%s\"; number=%d", id, num++); silc_mime_add_data(partial, buf + off, max_size); off += max_size; len -= max_size; } else { - snprintf(type, sizeof(type) - 1, + silc_silc_snprintf(type, sizeof(type) - 1, "message/partial; id=\"%s\"; number=%d; total=%d", id, num, num); silc_mime_add_data(partial, buf + off, len); @@ -774,7 +777,7 @@ void silc_mime_set_multipart(SilcMime mime, const char *type, return; memset(tmp, 0, sizeof(tmp)); - snprintf(tmp, sizeof(tmp) - 1, "multipart/%s; boundary=%s", type, boundary); + silc_silc_snprintf(tmp, sizeof(tmp) - 1, "multipart/%s; boundary=%s", type, boundary); silc_mime_add_field(mime, "Content-Type", tmp); silc_free(mime->boundary); mime->boundary = strdup(boundary);