Fixes bug 1064
Patch frome Andrey N. Oktyabrski
uschar *p, *t;
int hlen;
BOOL coded = FALSE;
uschar *p, *t;
int hlen;
BOOL coded = FALSE;
+BOOL first_byte = FALSE;
if (charset == NULL) charset = US"iso-8859-1";
if (charset == NULL) charset = US"iso-8859-1";
int ch = *s++;
if (t > buffer + buffer_size - hlen - 8) break;
int ch = *s++;
if (t > buffer + buffer_size - hlen - 8) break;
+ if ((t - p > 67) && !first_byte)
{
*t++ = '?';
*t++ = '=';
{
*t++ = '?';
*t++ = '=';
if (ch < 33 || ch > 126 ||
Ustrchr("?=()<>@,;:\\\".[]_", ch) != NULL)
{
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;
{
sprintf(CS t, "=%02X", ch);
while (*t != 0) t++;
coded = TRUE;
+ first_byte = !first_byte;
+ else { *t++ = ch; first_byte = FALSE; }