From bf1dbf9b0ff37fc7638aa09f035f5f98094c84e9 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Thu, 24 Feb 2011 16:51:10 +0300 Subject: Fix FSM for headers parsing. --- src/message.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/message.c b/src/message.c index 2056e87ca..28880b8da 100644 --- a/src/message.c +++ b/src/message.c @@ -497,6 +497,7 @@ process_raw_headers (struct worker_task *task) tmp = memory_pool_alloc (task->task_pool, l + 1); rspamd_strlcpy (tmp, c, l + 1); new->name = tmp; + new->empty_separator = TRUE; p ++; state = 2; c = p; @@ -517,14 +518,14 @@ process_raw_headers (struct worker_task *task) new->empty_separator = FALSE; p ++; } - else if (*p == ' '){ + else if (*p == ' ') { new->empty_separator = FALSE; p ++; } else if (*p == '\n' || *p == '\r') { /* Process folding */ state = 99; - l = p - c - 1; + l = p - c; if (l > 0) { tmp = memory_pool_alloc (task->task_pool, l + 1); rspamd_strlcpy (tmp, c, l + 1); @@ -536,7 +537,7 @@ process_raw_headers (struct worker_task *task) } else { /* Process value */ - l = p - c - 1; + l = p - c; if (l > 0) { tmp = memory_pool_alloc (task->task_pool, l + 1); rspamd_strlcpy (tmp, c, l + 1); @@ -560,7 +561,7 @@ process_raw_headers (struct worker_task *task) case 4: /* Copy header's value */ l = p - c; - tmp = memory_pool_alloc (task->task_pool, l); + tmp = memory_pool_alloc (task->task_pool, l + 1); tp = tmp; t_state = 0; while (l --) { @@ -568,6 +569,7 @@ process_raw_headers (struct worker_task *task) /* Before folding */ if (*c == '\n' || *c == '\r') { t_state = 1; + c ++; } else { *tp ++ = *c ++; -- cgit v1.2.3