From: Timo Sirainen Date: Wed, 18 Jun 2003 01:35:44 +0000 (+0300) Subject: LWSP stripping with NUL/8bit chars set wrong literal size which broke things. X-Git-Tag: 1.1.alpha1~4548 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6a45a29b14e17b8eb232a2547614b120ae404bcd;p=thirdparty%2Fdovecot%2Fcore.git LWSP stripping with NUL/8bit chars set wrong literal size which broke things. --HG-- branch : HEAD --- diff --git a/src/lib-imap/imap-quote.c b/src/lib-imap/imap-quote.c index 87ab6ed628..75e01d892b 100644 --- a/src/lib-imap/imap-quote.c +++ b/src/lib-imap/imap-quote.c @@ -7,7 +7,7 @@ void imap_quote_append(string_t *str, const unsigned char *value, size_t value_len) { - size_t i, linefeeds = 0; + size_t i, extra = 0; int last_lwsp = TRUE, literal = FALSE, modify = FALSE; if (value == NULL) { @@ -23,23 +23,27 @@ void imap_quote_append(string_t *str, const unsigned char *value, case 0: /* it's converted to 8bit char */ literal = TRUE; - case '\t': modify = TRUE; + last_lwsp = FALSE; break; case ' ': - if (last_lwsp) + case '\t': + if (last_lwsp) { modify = TRUE; + extra++; + } last_lwsp = TRUE; break; case 13: case 10: - linefeeds++; + extra++; modify = TRUE; break; default: if ((value[i] & 0x80) != 0 || value[i] == '"' || value[i] == '\\') literal = TRUE; + last_lwsp = FALSE; } } @@ -48,7 +52,7 @@ void imap_quote_append(string_t *str, const unsigned char *value, str_append_c(str, '"'); } else { /* return as literal */ - str_printfa(str, "{%"PRIuSIZE_T"}\r\n", value_len - linefeeds); + str_printfa(str, "{%"PRIuSIZE_T"}\r\n", value_len - extra); } if (!modify)