[exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog exim…

Góra strony
Delete this message
Reply to this message
Autor: Philip Hazel
Data:  
Dla: exim-cvs
Temat: [exim-cvs] cvs commit: exim/exim-doc/doc-txt ChangeLog exim/exim-src/src expand.c parse.c exim/exim-test-orig/AutoTest/scripts 082 exim/exim-test-orig/AutoTest/stdout 082
ph10 2004/11/17 15:21:10 GMT

  Modified files:
    exim-doc/doc-txt     ChangeLog 
    exim-src/src         expand.c parse.c 
    exim-test-orig/AutoTest/scripts 082 
    exim-test-orig/AutoTest/stdout 082 
  Log:
  Respect the 75-character limit for "encoded words" when doing RFC 2047
  encoding, and increase the buffer size for ${rfc2047: expansion.


  Revision  Changes    Path
  1.30      +7 -0      exim/exim-doc/doc-txt/ChangeLog
  1.5       +1 -1      exim/exim-src/src/expand.c
  1.2       +28 -4     exim/exim-src/src/parse.c
  1.3       +3 -0      exim/exim-test-orig/AutoTest/scripts/082
  1.3       +3 -0      exim/exim-test-orig/AutoTest/stdout/082


  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/exim/exim-doc/doc-txt/ChangeLog,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- ChangeLog    17 Nov 2004 14:32:25 -0000    1.29
  +++ ChangeLog    17 Nov 2004 15:21:10 -0000    1.30
  @@ -1,4 +1,4 @@
  -$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.29 2004/11/17 14:32:25 ph10 Exp $
  +$Cambridge: exim/exim-doc/doc-txt/ChangeLog,v 1.30 2004/11/17 15:21:10 ph10 Exp $


   Change log file for Exim from version 4.21
   -------------------------------------------
  @@ -121,6 +121,13 @@
       function that finds that data and another that does the check. The former
       is then used to implement four new variables: $spool_space, $log_space,
       $spool_inodes, and $log_inodes.
  +
  +32. The RFC2047 encoding function was originally intended for short strings
  +    such as real names; it was not keeping to the 75-character limit for
  +    encoded words that the RFC imposes. It now respects the limit, and
  +    generates multiple encoded words if necessary. To be on the safe side, I
  +    have increased the buffer size for the ${rfc2047: expansion operator from
  +    1024 to 2048 bytes.



Exim version 4.43

  Index: expand.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/expand.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- expand.c    17 Nov 2004 14:32:25 -0000    1.4
  +++ expand.c    17 Nov 2004 15:21:10 -0000    1.5
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/expand.c,v 1.4 2004/11/17 14:32:25 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/expand.c,v 1.5 2004/11/17 15:21:10 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -4083,7 +4083,7 @@


         case EOP_RFC2047:
           {
  -        uschar buffer[1024];
  +        uschar buffer[2048];
           uschar *string = parse_quote_2047(sub, Ustrlen(sub), headers_charset,
             buffer, sizeof(buffer));
           yield = string_cat(yield, &size, &ptr, string, Ustrlen(string));


  Index: parse.c
  ===================================================================
  RCS file: /home/cvs/exim/exim-src/src/parse.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- parse.c    7 Oct 2004 10:39:01 -0000    1.1
  +++ parse.c    17 Nov 2004 15:21:10 -0000    1.2
  @@ -1,4 +1,4 @@
  -/* $Cambridge: exim/exim-src/src/parse.c,v 1.1 2004/10/07 10:39:01 ph10 Exp $ */
  +/* $Cambridge: exim/exim-src/src/parse.c,v 1.2 2004/11/17 15:21:10 ph10 Exp $ */


   /*************************************************
   *     Exim - an Internet mail transport agent    *
  @@ -847,6 +847,11 @@
   original string, unmodified. If a quoted string is too long for the buffer, it
   is truncated. (This shouldn't happen: this is normally handling short strings.)


  +Hmmph. As always, things get perverted for other uses. This function was 
  +originally for the "phrase" part of addresses. Now it is being used for much 
  +longer texts in ACLs and via the ${rfc2047: expansion item. This means we have 
  +to check for overlong "encoded-word"s and split them. November 2004.
  +
   Arguments:
     string       the string to quote - already checked to contain non-printing
                    chars
  @@ -866,7 +871,8 @@
     int buffer_size)
   {
   uschar *s = string;
  -uschar *t;
  +uschar *p, *t;
  +int hlen;
   BOOL coded = FALSE;


   if (charset == NULL) charset = US"iso-8859-1";
  @@ -876,11 +882,25 @@
   if (!string_format(buffer, buffer_size, "=?%s?Q?", charset))
     return US"String too long";


  -t = buffer + Ustrlen(buffer);
  +hlen = Ustrlen(buffer);
  +t = buffer + hlen;
  +p = buffer;
  +
   for (; len > 0; len--)
     {
     int ch = *s++;
  -  if (t > buffer + buffer_size - 8) break;
  +  if (t > buffer + buffer_size - hlen - 8) break;
  +  
  +  if (t - p > 70)
  +    {
  +    *t++ = '?';
  +    *t++ = '=';
  +    *t++ = ' ';
  +    p = t;
  +    Ustrncpy(p, buffer, hlen);
  +    t += hlen;
  +    }      
  + 
     if (ch < 33 || ch > 126 ||
         Ustrchr("?=()<>@,;:\\\".[]_", ch) != NULL)
       {
  @@ -893,7 +913,11 @@
       }
     else *t++ = ch;
     }
  -sprintf(CS t, "?=");
  +   
  +*t++ = '?';
  +*t++ = '=';  
  +*t = 0;
  + 
   return coded? buffer : string;
   }



  Index: 082
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/scripts/082,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- 082    14 Oct 2004 11:16:36 -0000    1.2
  +++ 082    17 Nov 2004 15:21:10 -0000    1.3
  @@ -481,6 +481,9 @@
   abcd      ${rfc2047:abcd}
   <:abcd:>  ${rfc2047:<:abcd:>}
   <:ab cd:> ${rfc2047:<:ab cd:>}
  +Long:     ${rfc2047: here we go: a string that is going to be encoded: it will go over the 75-char limit}
  +Long:     ${rfc2047: here we go: a string that is going to be encoded: it will go over the 75-char limit by a long way; in fact this one will go over the 150 character limit}
  +


# UTF-8


  Index: 082
  ===================================================================
  RCS file: /home/cvs/exim/exim-test-orig/AutoTest/stdout/082,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- 082    14 Oct 2004 11:16:36 -0000    1.2
  +++ 082    17 Nov 2004 15:21:10 -0000    1.3
  @@ -477,6 +477,9 @@
   > abcd      abcd
   > <:abcd:>  =?iso-8859-8?Q?=3C=3Aabcd=3A=3E?=
   > <:ab cd:> =?iso-8859-8?Q?=3C=3Aab_cd=3A=3E?=
  +> Long:     =?iso-8859-8?Q?_here_we_go=3A_a_string_that_is_going_to_be_encoded=3A_i?= =?iso-8859-8?Q?t_will_go_over_the_75-char_limit?=
  +> Long:     =?iso-8859-8?Q?_here_we_go=3A_a_string_that_is_going_to_be_encoded=3A_i?= =?iso-8859-8?Q?t_will_go_over_the_75-char_limit_by_a_long_way=3B_in_fac?= =?iso-8859-8?Q?t_this_one_will_go_over_the_150_character_limit?=
  +> 

>
> # UTF-8
>