From: Vsevolod Stakhov Date: Tue, 30 Dec 2014 18:52:58 +0000 (+0000) Subject: Some fixes to macro expansion in spf. X-Git-Tag: 0.8.0~7 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=7cb713aa457bb0169b2c9811555c0bc071d3c3e9;p=rspamd.git Some fixes to macro expansion in spf. --- 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 (