]> err.no Git - sope/commitdiff
applied patch from OGo bug #789, 2008-01-29
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 29 Jan 2008 09:47:54 +0000 (09:47 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 29 Jan 2008 09:47:54 +0000 (09:47 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1592 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-mime/ChangeLog
sope-mime/NGMime/ChangeLog
sope-mime/NGMime/NGMimeAddressHeaderFieldGenerator.m
sope-mime/NGMime/NGMimeHeaderFieldGenerator.m
sope-mime/NGMime/NGMimeHeaderFieldGeneratorSet.m
sope-mime/Version

index ed0759c2833265d7b9e5efd07c4ac52b2fad87ba..bfa52e1bc97bb2c0ac568cba177b6b32de81775f 100644 (file)
@@ -1,3 +1,7 @@
+2008-01-29  Albrecht Dress  <albrecht.dress@lios-tech.com>
+
+       * fixes for OGo bug #789 (reply-to QP encoding) (v4.7.2)
+
 2007-08-29  Helge Hess  <helge.hess@opengroupware.org>
 
        * MacOS Version overflow (v4.7.1)
index fd4bcd275f5f59df07179b55e6727582cc069951..a62752a3a87b4bc8edef8be5814ac7d404abf332 100644 (file)
@@ -1,3 +1,7 @@
+2008-01-29  Albrecht Dress  <albrecht.dress@lios-tech.com>
+
+       * fixes for OGo bug #789 (reply-to QP encoding)
+
 2007-08-29  Helge Hess  <helge.hess@opengroupware.org>
 
        * NGMimeFileData.m ([NGMimeFileData -initWithBytes:length:]): do not
index f4cbd8696df0ea738d031286709039b7e8b666c5..abe063874d2a1b8bca4805f1d6186419f507c2f5 100644 (file)
@@ -114,7 +114,14 @@ static int UseLFSeperatedAddressEntries = -1;
     doEnc = NO;
     
     while (cnt < bufLen) {
-      if ((unsigned char)buffer[cnt] > 127) {
+      /* must encode chars outside ASCII 33..60, 62..126 ranges [RFC 2045, Sect. 6.7]
+       * RFC 2047, Sect. 4.2 also requires chars 63 and 95 to be encoded
+       * For spaces, quotation is fine */
+      if ((unsigned char)buffer[cnt] < 32 ||
+         (unsigned char)buffer[cnt] == 61 ||
+         (unsigned char)buffer[cnt] == 63 ||
+          (unsigned char)buffer[cnt] == 95 ||
+         (unsigned char)buffer[cnt] > 126) {
         doEnc = YES;
         break;
       }
@@ -122,6 +129,7 @@ static int UseLFSeperatedAddressEntries = -1;
     }
     
     if (doEnc) {
+      /* FIXME - better use UTF8 encoding! */
       unsigned char iso[]     = "=?iso-8859-15?q?";
       unsigned      isoLen    = 16;
       unsigned char isoEnd[]  = "?=";
@@ -147,16 +155,15 @@ static int UseLFSeperatedAddressEntries = -1;
       desLen = bufLen * 3 + 20;
       des    = calloc(desLen + 10, sizeof(char));
       
-      memcpy(des, buffer, cnt);
-      memcpy(des + cnt, iso, isoLen);
+      memcpy(des, iso, isoLen);
+      memcpy(des + isoLen, buffer, bufLen);
       desLen =
-        NGEncodeQuotedPrintableMime((unsigned char *)buffer + cnt, bufLen- cnt,
-                                    des + cnt + isoLen,
-                                    desLen - cnt - isoLen);
+        NGEncodeQuotedPrintableMime((unsigned char *)buffer, bufLen,
+                                    des + isoLen, desLen - isoLen);
       if ((int)desLen != -1) {
-        memcpy(des + cnt + isoLen + desLen, isoEnd, isoEndLen);
+        memcpy(des + isoLen + desLen, isoEnd, isoEndLen);
         tmp = [NSString stringWithCString:(char *)des
-                        length:(cnt + isoLen + desLen + isoEndLen)];
+                        length:(isoLen + desLen + isoEndLen)];
       }
       else {
         [self warnWithFormat:
@@ -168,9 +175,10 @@ static int UseLFSeperatedAddressEntries = -1;
     if (buffer) free(buffer); buffer = NULL;
 
     if ([tmp length] > 0) {
-      [result appendString:@"\""];
+      /* do not place encoded strings in quotes [RFC 2045, RFC 2047, RFC 2822] */
+      if (!doEnc) [result appendString:@"\""];
       [result appendString:tmp];
-      [result appendString:@"\""];
+      if (!doEnc) [result appendString:@"\""];
       if ((tmp = [(NSHost *)obj address])) {
         [result appendString:@" <"];
         [result appendString:tmp];
index 15ad1d0abb04dff4e9e3de8655b8854473b88973..5629862c21abe660fc57a0271dfbca58f45b175d 100644 (file)
@@ -59,10 +59,14 @@ int NGEncodeQuotedPrintableMime
   
   for (cnt = 0; (cnt < _srcLen) && (destCnt < _destLen); cnt++) {
     register unsigned char c = _src[cnt];
-    
-    if (((c > 47) && (c < 58)) ||
-        ((c > 64) && (c < 91)) ||
-        ((c > 96) && (c < 123))) {
+
+    /* RFC 2045, Sect. 6.7 allows chars 33 through 60 inclusive, and 62 through 126, inclusive
+     * RFC 2047, Sect. 4.2 also requires chars 63 and 95 to be encoded
+     * Space might be "_", but let's encode it, too... */
+    if (((c >= 33) && (c <= 60)) ||
+       (c == 62) ||
+        ((c >= 64) && (c <= 94)) ||
+       ((c >= 96) && (c <= 126))) {
       // no quoting
       _dest[destCnt] = c;
       destCnt++;
index 67b0a77c25d9b03d90bc833f75b36b0d1bd1aeb0..95f8f7d4a4095152b380e8feece4682b3757aab9 100644 (file)
@@ -64,12 +64,20 @@ static NGMimeHeaderFieldGeneratorSet *rfc822Set = nil;
     [rfc822Set setGenerator:gen forField:Fields->date];
   
   if ((gen = [NGMimeAddressHeaderFieldGenerator headerFieldGenerator])) {
+    /* FIXME - following additional fields containing an address may be added here:
+     * - sender (RFC 2822, sect. 3.6.2)
+     * - resent-sender, resent-cc, resent-bcc (RFC 2822, sect. 3.6.6)
+     * Are the values case-insensitive, so "Reply-To" and "reply-to" will both
+     * be detected?
+     */
     [rfc822Set setGenerator:gen forField:@"resent-from"];
     [rfc822Set setGenerator:gen forField:@"resent-to"];
     [rfc822Set setGenerator:gen forField:Fields->to];
     [rfc822Set setGenerator:gen forField:Fields->cc];
     [rfc822Set setGenerator:gen forField:@"bcc"];
     [rfc822Set setGenerator:gen forField:Fields->from];
+    [rfc822Set setGenerator:gen forField:@"reply-to"];
+    [rfc822Set setGenerator:gen forField:@"Disposition-Notification-To"];
   }
   
   if ((gen = [NGMimeStringHeaderFieldGenerator headerFieldGenerator]))
index 4815fd2a408cc1859da2c4229a0176064dd87d49..c9b3501a252482122cdbfa39530b3837edbb2c60 100644 (file)
@@ -2,7 +2,7 @@
 
 MAJOR_VERSION:=4
 MINOR_VERSION:=7
-SUBMINOR_VERSION:=1
+SUBMINOR_VERSION:=2
 
 # v4.5.214 requires libNGExtensions v4.5.146
 # v4.2.149 requires libNGStreams    v4.2.34