X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/5ca6d115da010e279c2f928990b3c8d220378f24..57eb9e91fe084ad434fcc286f0135e89b658c213:/src/src/parse.c diff --git a/src/src/parse.c b/src/src/parse.c index d608d56de..94e42c182 100644 --- a/src/src/parse.c +++ b/src/src/parse.c @@ -1,10 +1,8 @@ -/* $Cambridge: exim/src/src/parse.c,v 1.14 2009/11/05 19:40:51 nm4 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2007 */ +/* Copyright (c) University of Cambridge 1995 - 2009 */ /* See the file NOTICE for conditions of use and distribution. */ /* Functions for parsing addresses */ @@ -876,6 +874,7 @@ uschar *s = string; uschar *p, *t; int hlen; BOOL coded = FALSE; +BOOL first_byte = FALSE; if (charset == NULL) charset = US"iso-8859-1"; @@ -893,7 +892,7 @@ for (; len > 0; len--) int ch = *s++; if (t > buffer + buffer_size - hlen - 8) break; - if (t - p > 70) + if ((t - p > 67) && !first_byte) { *t++ = '?'; *t++ = '='; @@ -907,14 +906,20 @@ for (; len > 0; len--) if (ch < 33 || ch > 126 || Ustrchr("?=()<>@,;:\\\".[]_", ch) != NULL) { - if (ch == ' ') *t++ = '_'; else + if (ch == ' ') + { + *t++ = '_'; + first_byte = FALSE; + } + else { sprintf(CS t, "=%02X", ch); while (*t != 0) t++; coded = TRUE; + first_byte = !first_byte; } } - else *t++ = ch; + else { *t++ = ch; first_byte = FALSE; } } *t++ = '?';