[exim-cvs] Fix wide character breakage in the rfc2047 coding

Αρχική Σελίδα
Delete this message
Reply to this message
Συντάκτης: Exim Git Commits Mailing List
Ημερομηνία:  
Προς: exim-cvs
Αντικείμενο: [exim-cvs] Fix wide character breakage in the rfc2047 coding
Gitweb: http://git.exim.org/exim.git/commitdiff/86ae49a65fce504ebcf9c30ddff213cca71fb872
Commit:     86ae49a65fce504ebcf9c30ddff213cca71fb872
Parent:     4ad401fb8100d20185c99aa00493e8bb49a53e45
Author:     Nigel Metheringham <nigel@???>
AuthorDate: Sun Jan 30 15:50:46 2011 +0000
Committer:  Nigel Metheringham <nigel@???>
CommitDate: Sun Jan 30 15:50:46 2011 +0000


    Fix wide character breakage in the rfc2047 coding


    Fixes bug 1064
    Patch frome    Andrey N. Oktyabrski
---
 src/src/parse.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)


diff --git a/src/src/parse.c b/src/src/parse.c
index 09fcf98..805b443 100644
--- a/src/src/parse.c
+++ b/src/src/parse.c
@@ -876,6 +876,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 +894,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 +908,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++ = '?';