diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-03-08 15:16:01 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-03-08 15:16:01 +0000 |
commit | c4187679948bc97445477cfc825ccdeecb5150bd (patch) | |
tree | 60ecd4094c02b23318141ed2ed161156631c4d7f /src/libserver/dkim.c | |
parent | 79e96b9643d50f3383499dc10938c4dc71eafae3 (diff) | |
download | rspamd-c4187679948bc97445477cfc825ccdeecb5150bd.tar.gz rspamd-c4187679948bc97445477cfc825ccdeecb5150bd.zip |
[Fix] Ignore whitespaces at the end of value in DKIM records
Diffstat (limited to 'src/libserver/dkim.c')
-rw-r--r-- | src/libserver/dkim.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/libserver/dkim.c b/src/libserver/dkim.c index 129d78c9c..8f41d6220 100644 --- a/src/libserver/dkim.c +++ b/src/libserver/dkim.c @@ -971,15 +971,31 @@ rspamd_create_dkim_context (const gchar *sig, case DKIM_STATE_VALUE: if (*p == ';') { if (param == DKIM_PARAM_UNKNOWN || - p - c == 0 || - !parser_funcs[param](ctx, c, p - c, err)) { + p - c == 0) { state = DKIM_STATE_ERROR; } else { - state = DKIM_STATE_SKIP_SPACES; - next_state = DKIM_STATE_TAG; - p++; - taglen = 0; + /* Cut trailing spaces for value */ + gint tlen = p - c; + const gchar *tmp = p - 1; + + while (tlen > 0) { + if (!g_ascii_isspace (*tmp)) { + break; + } + tlen --; + tmp --; + } + + if (!parser_funcs[param](ctx, c, tlen, err)) { + state = DKIM_STATE_ERROR; + } + else { + state = DKIM_STATE_SKIP_SPACES; + next_state = DKIM_STATE_TAG; + p++; + taglen = 0; + } } } else if (p == end) { |