diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-07-14 18:45:26 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-07-14 18:45:26 +0100 |
commit | 356f35cb0707181811bbb43fb56bc6d1bfdde866 (patch) | |
tree | aa182da24a9c7c563a5d21bb1028ff9db6f43975 /src/libserver/protocol.c | |
parent | 1c90f2e160037477192b9e4e9c480ce3a8a83a25 (diff) | |
download | rspamd-356f35cb0707181811bbb43fb56bc6d1bfdde866.tar.gz rspamd-356f35cb0707181811bbb43fb56bc6d1bfdde866.zip |
[Fix] Fix processing of addresses in protocol
Issue: #723
Reported by: @leoboiko
Diffstat (limited to 'src/libserver/protocol.c')
-rw-r--r-- | src/libserver/protocol.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c index d54f20d39..de1e08592 100644 --- a/src/libserver/protocol.c +++ b/src/libserver/protocol.c @@ -112,6 +112,7 @@ rspamd_protocol_escape_braces (struct rspamd_task *task, rspamd_fstring_t *in) guint nchars = 0; const gchar *p; rspamd_ftok_t tok; + gboolean has_obrace = FALSE; g_assert (in != NULL); g_assert (in->len > 0); @@ -119,6 +120,10 @@ rspamd_protocol_escape_braces (struct rspamd_task *task, rspamd_fstring_t *in) p = in->str; while ((g_ascii_isspace (*p) || *p == '<') && nchars < in->len) { + if (*p == '<') { + has_obrace = TRUE; + } + p++; nchars ++; } @@ -128,12 +133,15 @@ rspamd_protocol_escape_braces (struct rspamd_task *task, rspamd_fstring_t *in) p = in->str + in->len - 1; tok.len = in->len - nchars; - while ((!g_ascii_isspace (*p) && *p != - '>') && tok.len > 0) { + while (g_ascii_isspace (*p) && tok.len > 0) { p--; tok.len --; } + if (has_obrace && *p == '>') { + tok.len --; + } + return rspamd_mempool_ftokdup (task->task_pool, &tok); } |