commit 8a4c1dc: [Minor] Restore compatible behaviour for incomplete received headers

Vsevolod Stakhov vsevolod at highsecure.ru
Fri Oct 8 09:42:04 UTC 2021


Author: Vsevolod Stakhov
Date: 2021-10-08 10:39:59 +0100
URL: https://github.com/rspamd/rspamd/commit/8a4c1dc178012f04fe1590e74c134af2492ba180 (HEAD -> master)

[Minor] Restore compatible behaviour for incomplete received headers

---
 src/libmime/received.cxx | 32 ++++++++++++++++++--------------
 1 file changed, 18 insertions(+), 14 deletions(-)

diff --git a/src/libmime/received.cxx b/src/libmime/received.cxx
index 836af0464..0ff52da5a 100644
--- a/src/libmime/received.cxx
+++ b/src/libmime/received.cxx
@@ -263,13 +263,6 @@ received_spill(const std::string_view &in,
 
 	auto len = end - p;
 
-	/* Ignore all received but those started from from part */
-	if (len <= 4 || !lit_compare_lowercase<4>("from", p)) {
-		return {};
-	}
-
-	p += sizeof("from") - 1;
-
 	auto maybe_process_part = [&](received_part_type what) -> bool {
 		parts.emplace_back(what);
 		auto &rcvd_part = parts.back();
@@ -284,14 +277,19 @@ received_spill(const std::string_view &in,
 		return true;
 	};
 
-	/* We can now store from part */
-	if (!maybe_process_part(received_part_type::RSPAMD_RECEIVED_PART_FROM)) {
-		return {};
-	}
+	if (len > 4 && lit_compare_lowercase<4>("from", p)) {
+		p += sizeof("from") - 1;
 
-	g_assert (pos != 0);
-	p += pos;
-	len = end > p ? end - p : 0;
+		/* We can now store from part */
+		if (!maybe_process_part(received_part_type::RSPAMD_RECEIVED_PART_FROM)) {
+			/* Do not accept malformed from */
+			return {};
+		}
+
+		g_assert (pos != 0);
+		p += pos;
+		len = end > p ? end - p : 0;
+	}
 
 	if (len > 2 && lit_compare_lowercase<2>("by", p)) {
 		p += sizeof("by") - 1;
@@ -991,6 +989,12 @@ TEST_CASE("parse received")
 							{"from_hostname", "smtp11.mailtrack.pl"}
 					}
 			},
+			// No from part
+			{"by mail.832zsu.cn (Postfix) with ESMTPA id AAD722133E34"sv,
+					{
+							{"by_hostname", "mail.832zsu.cn"},
+					}
+			},
 	};
 	rspamd_mempool_t *pool = rspamd_mempool_new_default("rcvd test", 0);
 


More information about the Commits mailing list