From: Vsevolod Stakhov Date: Tue, 31 Mar 2020 10:25:27 +0000 (+0100) Subject: [Fix] Another fix for brain damaged obs-fws state X-Git-Tag: 2.5~5 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=447b68f3590279d3009d342addc575fbbe6735f3;p=rspamd.git [Fix] Another fix for brain damaged obs-fws state --- diff --git a/src/libutil/str_util.c b/src/libutil/str_util.c index cb69a8b33..4c16cb685 100644 --- a/src/libutil/str_util.c +++ b/src/libutil/str_util.c @@ -1875,16 +1875,13 @@ rspamd_string_find_eoh (GString *input, goffset *body_start) } else { /* - * newline wsp+ \r , hence: - * c -> eoh - * p + 1 -> body start + * + \r . + * It is an empty header likely, so we can go further... + * https://tools.ietf.org/html/rfc2822#section-4.2 */ - if (body_start) { - /* \r\n\r\n */ - *body_start = p - input->str + 1; - } - - return c - input->str; + c = p; + p ++; + state = got_cr; } } else { @@ -1899,33 +1896,36 @@ rspamd_string_find_eoh (GString *input, goffset *body_start) else if (*p == '\n') { /* Perform lookahead due to #2349 */ if (end - p > 1) { + /* Continue folding with an empty line */ if (p[1] == ' ' || p[1] == '\t') { c = p; p ++; state = obs_fws; } else if (p[1] == '\r') { + /* WTF state: we have seen spaces, \n and then it follows \r */ c = p; p ++; state = got_lf; } else if (p[1] == '\n') { + /* + * Switching to got_lf state here will let us to finish + * the cycle. + */ c = p; p ++; state = got_lf; } else { /* - * newline wsp+ \n , hence: - * c -> eoh - * p + 1 -> body start + * + \n . + * It is an empty header likely, so we can go further... + * https://tools.ietf.org/html/rfc2822#section-4.2 */ - if (body_start) { - /* \r\n\r\n */ - *body_start = p - input->str + 1; - } - - return c - input->str; + c = p; + p ++; + state = got_lf; } }