aboutsummaryrefslogtreecommitdiffstats
path: root/src/libserver/dkim.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2019-03-08 15:16:01 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2019-03-08 15:16:01 +0000
commitc4187679948bc97445477cfc825ccdeecb5150bd (patch)
tree60ecd4094c02b23318141ed2ed161156631c4d7f /src/libserver/dkim.c
parent79e96b9643d50f3383499dc10938c4dc71eafae3 (diff)
downloadrspamd-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.c28
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) {