--- clamav-0.88.7/libclamav/htmlnorm.c.bz-582
+++ clamav-0.88.7/libclamav/htmlnorm.c
@@ -1042,33 +1042,37 @@ static int cli_html_normalise(int fd, m_
}
break;
case HTML_RFC2397_INIT:
- file_tmp_o1 = (file_buff_t *) cli_malloc(sizeof(file_buff_t));
- if (!file_tmp_o1) {
- goto abort;
- }
- snprintf(filename, 1024, "%s/rfc2397", dirname);
- tmp_file = cli_gentemp(filename);
- cli_dbgmsg("RFC2397 data file: %s\n", tmp_file);
- file_tmp_o1->fd = open(tmp_file, O_WRONLY|O_CREAT|O_TRUNC, S_IWUSR|S_IRUSR);
- free(tmp_file);
- if (!file_tmp_o1->fd) {
- cli_dbgmsg("open failed: %s\n", filename);
- free(file_tmp_o1);
- goto abort;
- }
- file_tmp_o1->length = 0;
+ if (dirname) {
+ file_tmp_o1 = (file_buff_t *) cli_malloc(sizeof(file_buff_t));
+ if (!file_tmp_o1) {
+ goto abort;
+ }
+ snprintf(filename, 1024, "%s/rfc2397", dirname);
+ tmp_file = cli_gentemp(filename);
+ cli_dbgmsg("RFC2397 data file: %s\n", tmp_file);
+ file_tmp_o1->fd = open(tmp_file, O_WRONLY|O_CREAT|O_TRUNC, S_IWUSR|S_IRUSR);
+ free(tmp_file);
+ if (!file_tmp_o1->fd) {
+ cli_dbgmsg("open failed: %s\n", filename);
+ free(file_tmp_o1);
+ goto abort;
+ }
+ file_tmp_o1->length = 0;
- html_output_str(file_tmp_o1, "From html-normalise\n", 20);
- html_output_str(file_tmp_o1, "Content-type: ", 14);
- if ((tag_val_length == 0) && (*tag_val == ';')) {
+ html_output_str(file_tmp_o1, "From html-normalise\n", 20);
+ html_output_str(file_tmp_o1, "Content-type: ", 14);
+ if ((tag_val_length == 0) && (*tag_val == ';')) {
html_output_str(file_tmp_o1, "text/plain\n", 11);
+ }
+ html_output_str(file_tmp_o1, tag_val, tag_val_length);
+ html_output_c(file_tmp_o1, NULL, '\n');
+ if (strstr(tag_val, ";base64") != NULL) {
+ html_output_str(file_tmp_o1, "Content-transfer-encoding: base64\n", 34);
+ }
+ html_output_c(file_tmp_o1, NULL, '\n');
+ } else {
+ file_tmp_o1 = NULL;
}
- html_output_str(file_tmp_o1, tag_val, tag_val_length);
- html_output_c(file_tmp_o1, NULL, '\n');
- if (strstr(tag_val, ";base64") != NULL) {
- html_output_str(file_tmp_o1, "Content-transfer-encoding: base64\n", 34);
- }
- html_output_c(file_tmp_o1, NULL, '\n');
state = HTML_RFC2397_DATA;
binary = TRUE;
break;
@@ -1118,9 +1122,11 @@ static int cli_html_normalise(int fd, m_
}
break;
case HTML_RFC2397_FINISH:
- html_output_flush(file_tmp_o1);
- close(file_tmp_o1->fd);
- free(file_tmp_o1);
+ if(file_tmp_o1) {
+ html_output_flush(file_tmp_o1);
+ close(file_tmp_o1->fd);
+ free(file_tmp_o1);
+ }
state = HTML_SKIP_WS;
escape = FALSE;
quoted = NOT_QUOTED;