X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Fmime.c;h=f97d25abb3748885f700a579a4a16bba0c305df1;hb=84330b7b581bb93f145706b31288f13408312ccc;hp=0a636720088b5ba1b96fb9e174fd19aa45bdfca6;hpb=8e669ac162fe3b1040297f1d021de10778dce9d9;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/mime.c b/src/src/mime.c index 0a6367200..f97d25abb 100644 --- a/src/src/mime.c +++ b/src/src/mime.c @@ -1,4 +1,4 @@ -/* $Cambridge: exim/src/src/mime.c,v 1.4 2005/02/17 11:58:26 ph10 Exp $ */ +/* $Cambridge: exim/src/src/mime.c,v 1.6 2005/03/08 16:57:28 ph10 Exp $ */ /************************************************* * Exim - an Internet mail transport agent * @@ -115,10 +115,7 @@ uschar *mime_decode_qp_char(uschar *qp_p,int *c) { } -uschar *mime_parse_line(uschar *buffer, uschar *encoding, int *num_decoded) { - uschar *data = NULL; - - data = (uschar *)malloc(Ustrlen(buffer)+2); +uschar *mime_parse_line(uschar *buffer, uschar *data, uschar *encoding, int *num_decoded) { if (encoding == NULL) { /* no encoding type at all */ @@ -285,6 +282,7 @@ int mime_decode(uschar **listptr) { uschar decode_path[1024]; FILE *decode_file = NULL; uschar *buffer = NULL; + uschar *decode_buffer = NULL; long f_pos = 0; unsigned int size_counter = 0; @@ -296,7 +294,7 @@ int mime_decode(uschar **listptr) { /* build default decode path (will exist since MBOX must be spooled up) */ snprintf(CS decode_path,1024,"%s/scan/%s",spool_directory,message_id); - /* reserve a line buffer to work in */ + /* reserve a line and decoder buffer to work in */ buffer = (uschar *)malloc(MIME_MAX_LINE_LENGTH+1); if (buffer == NULL) { log_write(0, LOG_PANIC, @@ -304,6 +302,13 @@ int mime_decode(uschar **listptr) { return DEFER; }; + decode_buffer = (uschar *)malloc(MIME_MAX_LINE_LENGTH+1); + if (decode_buffer == NULL) { + log_write(0, LOG_PANIC, + "decode ACL condition: can't allocate %d bytes of memory.", MIME_MAX_LINE_LENGTH+1); + return DEFER; + }; + /* try to find 1st option */ if ((option = string_nextinlist(&list, &sep, option_buffer, @@ -358,7 +363,8 @@ int mime_decode(uschar **listptr) { }; }; - decoded_line = mime_parse_line(buffer, mime_content_transfer_encoding, &decoded_line_length); + decoded_line = mime_parse_line(buffer, decode_buffer, mime_content_transfer_encoding, &decoded_line_length); + /* write line to decode file */ if (fwrite(decoded_line, 1, decoded_line_length, decode_file) < decoded_line_length) { /* error/short write */ @@ -376,7 +382,6 @@ int mime_decode(uschar **listptr) { size_counter = (size_counter % 1024); }; - free(decoded_line); } fclose(decode_file);