From 96e3c0b401c3ea7a5dcd3cfc4092a36e0cd9cf4f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Thu, 25 Mar 2010 20:34:55 +0000 Subject: [PATCH] * unfold_rfc822_field(): don't forget to copy over chars while unfolding --- citadel/internet_addressing.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/citadel/internet_addressing.c b/citadel/internet_addressing.c index 006ad8e9b..c448001d1 100644 --- a/citadel/internet_addressing.c +++ b/citadel/internet_addressing.c @@ -388,20 +388,29 @@ void unfold_rfc822_field(char **field, char **FieldEnd) sField < pFieldEnd; pField++, sField++) { - if (*pField=='\"') quote = 1 - quote; - if (!quote) { - if (isspace(*sField)) - { - *pField = ' '; - pField++; + if ((*sField=='\r') || (*sField=='\n')) { + while (isspace(*sField)) sField++; - - while ((sField < pFieldEnd) && - isspace(*sField)) + *pField = *sField; + } + else { + if (*sField=='\"') quote = 1 - quote; + if (!quote) { + if (isspace(*sField)) + { + *pField = ' '; + pField++; sField++; + + while ((sField < pFieldEnd) && + isspace(*sField)) + sField++; + *pField = *sField; + } + else *pField = *sField; } + else *pField = *sField; } - else *pField = *sField; } *pField = '\0'; *FieldEnd = pField - 1; @@ -573,8 +582,10 @@ int convert_field(struct CtdlMessage *msg, const char *beg, const char *end) { valueend = key + len; * ( key + (colonpos - beg) ) = '\0'; value = &key[(colonpos - beg) + 1]; +/* printf("Header: [%s]\nValue: [%s]\n", key, value); */ unfold_rfc822_field(&value, &valueend); valuelen = valueend - value + 1; +/* printf("UnfoldedValue: [%s]\n", value); */ /* * Here's the big rfc822-to-citadel loop. -- 2.30.2