summaryrefslogtreecommitdiffstats
path: root/src/libserver/protocol.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-07-14 18:45:26 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-07-14 18:45:26 +0100
commit356f35cb0707181811bbb43fb56bc6d1bfdde866 (patch)
treeaa182da24a9c7c563a5d21bb1028ff9db6f43975 /src/libserver/protocol.c
parent1c90f2e160037477192b9e4e9c480ce3a8a83a25 (diff)
downloadrspamd-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.c12
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);
}