fixed a multiline subject header decoding issue

This commit is contained in:
SJ 2016-03-14 21:26:18 +01:00
parent bd0c7e9653
commit b9a3f8d7c0
2 changed files with 30 additions and 30 deletions

View File

@ -13,7 +13,7 @@
#define VERSION "1.2.0-master" #define VERSION "1.2.0-master"
#define BUILD 939 #define BUILD 940
#define HOSTID "mailarchiver" #define HOSTID "mailarchiver"

View File

@ -108,8 +108,6 @@ void post_parse(struct session_data *sdata, struct parser_state *state, struct _
clearhash(state->journal_recipient); clearhash(state->journal_recipient);
trimBuffer(state->b_subject); trimBuffer(state->b_subject);
fixupEncodedHeaderLine(state->b_subject, MAXBUFSIZE);
if(sdata->internal_sender == 0) sdata->direction = DIRECTION_INCOMING; if(sdata->internal_sender == 0) sdata->direction = DIRECTION_INCOMING;
else { else {
@ -460,13 +458,16 @@ 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->is_1st_header == 1){
if(state->message_state == MSG_SUBJECT && strlen(state->b_subject) + strlen(buf) < MAXBUFSIZE-1){
if(state->b_subject[0] == '\0'){ if(state->b_subject[0] == '\0'){
p = &buf[0]; p = &buf[0];
if(strncmp(buf, "Subject:", strlen("Subject:")) == 0) p += strlen("Subject:"); if(strncmp(buf, "Subject:", strlen("Subject:")) == 0) p += strlen("Subject:");
if(*p == ' ') p++; if(*p == ' ') p++;
fixupEncodedHeaderLine(p, MAXBUFSIZE);
strncat(state->b_subject, p, MAXBUFSIZE-strlen(state->b_subject)-1); strncat(state->b_subject, p, MAXBUFSIZE-strlen(state->b_subject)-1);
} }
else { else {
@ -481,13 +482,12 @@ int parse_line(char *buf, struct parser_state *state, struct session_data *sdata
while(isspace(*p)) p++; while(isspace(*p)) p++;
} }
fixupEncodedHeaderLine(p, MAXBUFSIZE);
strncat(state->b_subject, p, MAXBUFSIZE-strlen(state->b_subject)-1); strncat(state->b_subject, p, MAXBUFSIZE-strlen(state->b_subject)-1);
} }
} }
else { fixupEncodedHeaderLine(buf, MAXBUFSIZE); }
if(state->is_1st_header == 1){
fixupEncodedHeaderLine(buf, MAXBUFSIZE);
} }