From 7cb713aa457bb0169b2c9811555c0bc071d3c3e9 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 30 Dec 2014 18:52:58 +0000 Subject: [PATCH] Some fixes to macro expansion in spf. --- src/libserver/spf.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/libserver/spf.c b/src/libserver/spf.c index df5426b1d..06b53c184 100644 --- a/src/libserver/spf.c +++ b/src/libserver/spf.c @@ -1109,13 +1109,15 @@ expand_spf_macro (struct rspamd_task *task, struct spf_record *rec, break; case 1: /* We got % sign, so we should whether wait for { or for - or for _ or for % */ - if (*p == '%' || *p == '-') { + if (*p == '%' || *p == '_') { /* Just a single % sign or space */ len++; + state = 0; } - else if (*p == '_') { + else if (*p == '-') { /* %20 */ len += sizeof ("%20") - 1; + state = 0; } else if (*p == '{') { state = 2; @@ -1224,15 +1226,18 @@ expand_spf_macro (struct rspamd_task *task, struct spf_record *rec, if (*p == '%') { /* Just a single % sign or space */ *c++ = '%'; + state = 0; } - else if (*p == '-') { + else if (*p == '_') { *c++ = ' '; + state = 0; } - else if (*p == '_') { + else if (*p == '-') { /* %20 */ *c++ = '%'; *c++ = '2'; *c++ = '0'; + state = 0; } else if (*p == '{') { state = 2; @@ -1318,7 +1323,7 @@ expand_spf_macro (struct rspamd_task *task, struct spf_record *rec, len = 0; } else if (g_ascii_isdigit (*p)) { - /*XXX: try to implement domain strimming */ + /*XXX: try to implement domain trimming */ } else { msg_info ( -- 2.39.5