commit 447b68f: [Fix] Another fix for brain damaged obs-fws state

Vsevolod Stakhov vsevolod at highsecure.ru
Tue Mar 31 10:28:17 UTC 2020


Author: Vsevolod Stakhov
Date: 2020-03-31 11:25:27 +0100
URL: https://github.com/rspamd/rspamd/commit/447b68f3590279d3009d342addc575fbbe6735f3 (HEAD -> master)

[Fix] Another fix for brain damaged obs-fws state

---
 src/libutil/str_util.c | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

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 <nwsp>, hence:
-						 * c -> eoh
-						 * p + 1 -> body start
+						 * <nline> <wsp>+ \r <nwsp>.
+						 * 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 <nwsp>, hence:
-						 * c -> eoh
-						 * p + 1 -> body start
+						 * <nline> <wsp>+ \n <nwsp>.
+						 * 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;
 					}
 
 				}


More information about the Commits mailing list