Allow for linefold when generating more than one RFC 2047 encoded-word.
authorPhilip Hazel <ph10@hermes.cam.ac.uk>
Wed, 8 Mar 2006 11:13:07 +0000 (11:13 +0000)
committerPhilip Hazel <ph10@hermes.cam.ac.uk>
Wed, 8 Mar 2006 11:13:07 +0000 (11:13 +0000)
Sieve uses this.

doc/doc-txt/ChangeLog
src/src/expand.c
src/src/functions.h
src/src/parse.c
src/src/sieve.c

index 632e111..2987559 100644 (file)
@@ -1,4 +1,4 @@
-$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.325 2006/03/08 10:49:18 ph10 Exp $
+$Cambridge: exim/doc/doc-txt/ChangeLog,v 1.326 2006/03/08 11:13:07 ph10 Exp $
 
 Change log file for Exim from version 4.21
 -------------------------------------------
@@ -296,6 +296,10 @@ PH/57 Tidies in SMTP dialogue display in debug output: (i) It was not showing
       challenges; (ii) I've removed the CR characters from the debug output for
       SMTP output lines.
 
+PH/58 Allow for the insertion of a newline as well as a space when a string
+      is turned into more than one encoded-word during RFC 2047 encoding. The
+      Sieve code now uses this.
+
 
 Exim version 4.60
 -----------------
index 5d63cb1..3b50363 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/expand.c,v 1.56 2006/03/01 11:40:51 ph10 Exp $ */
+/* $Cambridge: exim/src/src/expand.c,v 1.57 2006/03/08 11:13:07 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -4737,7 +4737,7 @@ while (*s != 0)
         {
         uschar buffer[2048];
         uschar *string = parse_quote_2047(sub, Ustrlen(sub), headers_charset,
-          buffer, sizeof(buffer));
+          buffer, sizeof(buffer), FALSE);
         yield = string_cat(yield, &size, &ptr, string, Ustrlen(string));
         continue;
         }
index 9b8bfac..2728d79 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/functions.h,v 1.23 2006/02/28 11:25:40 ph10 Exp $ */
+/* $Cambridge: exim/src/src/functions.h,v 1.24 2006/03/08 11:13:07 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -176,7 +176,7 @@ extern uschar *parse_find_address_end(uschar *, BOOL);
 extern uschar *parse_find_at(uschar *);
 extern uschar *parse_fix_phrase(uschar *, int, uschar *, int);
 extern uschar *parse_message_id(uschar *, uschar **, uschar **);
-extern uschar *parse_quote_2047(uschar *, int, uschar *, uschar *, int);
+extern uschar *parse_quote_2047(uschar *, int, uschar *, uschar *, int, BOOL);
 
 extern BOOL    queue_action(uschar *, int, uschar **, int, int);
 extern void    queue_check_only(void);
index 182df80..a036643 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/parse.c,v 1.8 2006/02/28 11:25:40 ph10 Exp $ */
+/* $Cambridge: exim/src/src/parse.c,v 1.9 2006/03/08 11:13:07 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -854,6 +854,8 @@ Arguments:
   charset      the name of the character set; NULL => iso-8859-1
   buffer       the buffer to put the answer in
   buffer_size  the size of the buffer
+  fold         if TRUE, a newline is inserted before the separating space when
+                 more than one encoded-word is generated
 
 Returns:       pointer to the original string, if no quoting needed, or
                pointer to buffer containing the quoted string, or
@@ -863,7 +865,7 @@ Returns:       pointer to the original string, if no quoting needed, or
 
 uschar *
 parse_quote_2047(uschar *string, int len, uschar *charset, uschar *buffer,
-  int buffer_size)
+  int buffer_size, BOOL fold)
 {
 uschar *s = string;
 uschar *p, *t;
@@ -890,6 +892,7 @@ for (; len > 0; len--)
     {
     *t++ = '?';
     *t++ = '=';
+    if (fold) *t++ = '\n';
     *t++ = ' ';
     p = t;
     Ustrncpy(p, buffer, hlen);
@@ -989,7 +992,7 @@ for (i = 0, s = phrase; i < len; i++, s++)
   if ((*s < 32 && *s != '\t') || *s > 126) break;
 
 if (i < len) return parse_quote_2047(phrase, len, headers_charset, buffer,
-  buffer_size);
+  buffer_size, FALSE);
 
 /* No non-printers; use the RFC 822 quoting rules */
 
index 8b89a0e..3b0199d 100644 (file)
@@ -1,4 +1,4 @@
-/* $Cambridge: exim/src/src/sieve.c,v 1.18 2006/03/01 10:40:03 ph10 Exp $ */
+/* $Cambridge: exim/src/src/sieve.c,v 1.19 2006/03/08 11:13:07 ph10 Exp $ */
 
 /*************************************************
 *     Exim - an Internet mail transport agent    *
@@ -2854,7 +2854,7 @@ while (*filter->pc)
           /* Allocation is larger than neccessary, but enough even for split MIME words */
           buffer_capacity=32+4*subject.length;
           buffer=store_get(buffer_capacity);
-          addr->reply->subject=parse_quote_2047(subject.character, subject.length, US"utf-8", buffer, buffer_capacity);
+          addr->reply->subject=parse_quote_2047(subject.character, subject.length, US"utf-8", buffer, buffer_capacity, TRUE);
           addr->reply->oncelog=once;
           addr->reply->once_repeat=days*86400;