diff --git a/src/config.h b/src/config.h index d145b519..beef97f1 100644 --- a/src/config.h +++ b/src/config.h @@ -13,7 +13,7 @@ #define VERSION "1.2.0-master" -#define BUILD 939 +#define BUILD 940 #define HOSTID "mailarchiver" diff --git a/src/parser.c b/src/parser.c index fa1343a8..f0b80474 100644 --- a/src/parser.c +++ b/src/parser.c @@ -108,8 +108,6 @@ void post_parse(struct session_data *sdata, struct parser_state *state, struct _ clearhash(state->journal_recipient); trimBuffer(state->b_subject); - fixupEncodedHeaderLine(state->b_subject, MAXBUFSIZE); - if(sdata->internal_sender == 0) sdata->direction = DIRECTION_INCOMING; else { @@ -460,34 +458,36 @@ int parse_line(char *buf, struct parser_state *state, struct session_data *sdata } - if(state->is_1st_header == 1 && state->message_state == MSG_SUBJECT && strlen(state->b_subject) + strlen(buf) < MAXBUFSIZE-1){ - - if(state->b_subject[0] == '\0'){ - p = &buf[0]; - if(strncmp(buf, "Subject:", strlen("Subject:")) == 0) p += strlen("Subject:"); - if(*p == ' ') p++; - - strncat(state->b_subject, p, MAXBUFSIZE-strlen(state->b_subject)-1); - } - else { - - /* - * if the next subject line is encoded, then strip the whitespace characters at the beginning of the line - */ - - p = buf; - - if(strcasestr(buf, "?Q?") || strcasestr(buf, "?B?")){ - while(isspace(*p)) p++; - } - - strncat(state->b_subject, p, MAXBUFSIZE-strlen(state->b_subject)-1); - } - } - - if(state->is_1st_header == 1){ - fixupEncodedHeaderLine(buf, MAXBUFSIZE); + + if(state->message_state == MSG_SUBJECT && strlen(state->b_subject) + strlen(buf) < MAXBUFSIZE-1){ + + if(state->b_subject[0] == '\0'){ + p = &buf[0]; + if(strncmp(buf, "Subject:", strlen("Subject:")) == 0) p += strlen("Subject:"); + if(*p == ' ') p++; + + fixupEncodedHeaderLine(p, MAXBUFSIZE); + strncat(state->b_subject, p, MAXBUFSIZE-strlen(state->b_subject)-1); + } + else { + + /* + * if the next subject line is encoded, then strip the whitespace characters at the beginning of the line + */ + + p = buf; + + if(strcasestr(buf, "?Q?") || strcasestr(buf, "?B?")){ + while(isspace(*p)) p++; + } + + fixupEncodedHeaderLine(p, MAXBUFSIZE); + + strncat(state->b_subject, p, MAXBUFSIZE-strlen(state->b_subject)-1); + } + } + else { fixupEncodedHeaderLine(buf, MAXBUFSIZE); } }