]> err.no Git - sope/commitdiff
fixed OGo bug #1587 (qp decoding in IMAP4 envelopes)
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 13 Dec 2005 15:14:50 +0000 (15:14 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Tue, 13 Dec 2005 15:14:50 +0000 (15:14 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1196 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-mime/ChangeLog
sope-mime/NGImap4/ChangeLog
sope-mime/NGImap4/NGImap4ResponseParser.m
sope-mime/NGMime/ChangeLog
sope-mime/NGMime/NGMimeAddressHeaderFieldGenerator.m
sope-mime/NGMime/NGMimeUtilities.h
sope-mime/Version

index 5437929df7c012f5d82ffec2256decd0ac827edb..fe348fcd042e00de1d0ec2a435c9fc2b7f9f801c 100644 (file)
@@ -1,3 +1,11 @@
+2005-12-13  Helge Hess  <helge.hess@opengroupware.org>
+
+       * v4.5.238
+
+       * NGImap4: fixed QP handling in IMAP4 envelopes (#1587)
+
+       * NGMime: code cleanups
+
 2005-11-17  Helge Hess  <helge.hess@opengroupware.org>
 
        * properly include string.h where required to avoid warnings (v4.5.237)
index 79279d5a56260a432afad4cdd554c58544302228..f1d86707f7162a63ad6ac50ed229cc12e111a247 100644 (file)
@@ -1,3 +1,8 @@
+2005-12-13  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGImap4ResponseParser.m: properly decode quoted-printable headers
+         when the QP marker starts somewhere inside the header value
+
 2005-07-27  Helge Hess  <helge.hess@skyrix.com>
 
        * NGImap4Connection.m: fixed gcc 4.0 warnings
index d3eeedca03d341e549f456e7f6d2f04df147ff40..fb89b618cda52d27efe696cd69ca70a9987cdb38 100644 (file)
@@ -1123,8 +1123,8 @@ static BOOL _parseThreadResponse(NGImap4ResponseParser *self,
   if ([_string isKindOfClass:StrClass]) {
     if ([_string length] <= 6 /* minimum size */)
       return _string;
-    if ([_string characterAtIndex:0] == '=' &&
-       [_string characterAtIndex:1] == '?') {
+    
+    if ([_string rangeOfString:@"=?"].length > 0) {
       NSData *data;
       
       if (debugOn)
@@ -1172,7 +1172,7 @@ static BOOL _parseThreadResponse(NGImap4ResponseParser *self,
   /* parse personal name, can be with quoted printable encoding! */
   
   pname = [self _parseQuotedStringOrNIL];
-  if ([pname isNotNull])
+  if ([pname isNotNull]) // TODO: headerField 'subject'?? explain!
     pname = [self _decodeQP:pname headerField:@"subject"];
   [self _consumeOptionalSpace];
   
index 084a490701c8cdf34bde1a736a3ed5db26c29b87..e13d2c4ac2bc1e99c2eb3a729ac64fd079d561ee 100644 (file)
@@ -1,3 +1,9 @@
+2005-12-13  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGMimeAddressHeaderFieldGenerator.m: use -warnWithFormat:
+
+       * NGMimeUtilities.h: code cleanups
+
 2005-11-17  Helge Hess  <helge.hess@opengroupware.org>
 
        * properly include string.h where required to avoid warnings
index c20d12a97005b37b7712de88ec063505201fcf31..f4cbd8696df0ea738d031286709039b7e8b666c5 100644 (file)
@@ -91,7 +91,7 @@ static int UseLFSeperatedAddressEntries = -1;
   enumerator = [[parser parseAddressList] objectEnumerator];
   result     = [[NSMutableString alloc] initWithCapacity:128];
   
-  while ((obj = [enumerator nextObject])) {
+  while ((obj = [enumerator nextObject]) != nil) {
     NSString   *tmp;
     char       *buffer;
     unsigned   bufLen, cnt;
@@ -159,8 +159,8 @@ static int UseLFSeperatedAddressEntries = -1;
                         length:(cnt + isoLen + desLen + isoEndLen)];
       }
       else {
-        [self logWithFormat:@"WARNING(%s:%i): An error occour during "
-               @"quoted-printable decoding",
+        [self warnWithFormat:
+               @"%s:%i: An error occour during quoted-printable decoding",
                __PRETTY_FUNCTION__, __LINE__];
       }
       if (des) free(des);
index d3f6c24ddcce2884af51ce9dfbd3c4f830656757..d5df2bdffc160b76570f91487976d7248ce28aff 100644 (file)
@@ -125,24 +125,29 @@ static inline BOOL isMime_ValidTypeAttributeChar(unsigned char _byte) {
 }
 
 static inline NSData *_quotedPrintableEncoding(NSData *_data) {
-  const char   *bytes  = [_data bytes];
-  unsigned int length  = [_data length];
+  const char   *bytes;
+  unsigned int length;
   NSData       *result = nil;  
   char         *des    = NULL;
   unsigned int desLen  = 0;
-  unsigned     cnt     = length;
-  const char   *test   = bytes;    
+  unsigned     cnt;
+  const char   *test;    
   BOOL         doEnc   = NO;
 
-  while (cnt > 0) {
+  bytes  = [_data bytes];
+  length = [_data length];
+  cnt    = length;
+  test   = bytes;    
+  
+  for (cnt = length, test = bytes; cnt > 0; test++, cnt--) {
     if ((unsigned char)*test > 127) {
       doEnc = YES;
       break;
     }
-    test++;
-    cnt--;
   }
-  if (!doEnc) return _data;
+  if (!doEnc) 
+    return _data;
+  
   desLen = length *3;
   des = NGMallocAtomic(sizeof(char) * desLen + 2);
   
index 98802f864a9e0772e3415f0c69df4a0274c594fb..662bf876f4b270fd415aa599d25e58dee7f03fe3 100644 (file)
@@ -2,7 +2,7 @@
 
 MAJOR_VERSION:=4
 MINOR_VERSION:=5
-SUBMINOR_VERSION:=237
+SUBMINOR_VERSION:=238
 
 # v4.5.214 requires libNGExtensions v4.5.146
 # v4.2.149 requires libNGStreams    v4.2.34