]> err.no Git - sope/commitdiff
fixed OGo bug #1885
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sun, 15 Jul 2007 10:05:18 +0000 (10:05 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Sun, 15 Jul 2007 10:05:18 +0000 (10:05 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1507 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-mime/ChangeLog
sope-mime/NGImap4/ChangeLog
sope-mime/NGImap4/NSString+Imap4.m
sope-mime/Version

index 33e50a0457d3d9b509ead530de8ed86ae93bdb51..800c7b896d10130efb16d1216deba68b17f0b6f7 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-15  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGImap4: fixed an encoding issue on gstep-base/Cocoa (OGo bug #1885)
+         (v4.7.249)
+
 2007-06-01  Helge Hess  <helge.hess@opengroupware.org>
 
        * NGMime: code refactoring, fixed OGo bug #1856 (QP decoding)
index cf1a60b5dfd208e6d143b72e22ebb01110c3f880..68ac323093339b921e2e499e98d7de47ca22e5c9 100644 (file)
@@ -1,3 +1,9 @@
+2007-07-15  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NSString+Imap4.m: changed code to use -initWithData: as suggested in
+         bug report (OGo bug #1885). Note that the methods still support
+         Latin1 only and should be changed to decode/encode unichar buffers
+
 2007-05-28  Helge Hess  <helge.hess@opengroupware.org>
 
        * NGImap4ResponseNormalizer.m: changed not to throw an exception in the
index 76594791bbb8039289cb27e6ecc453c48a07bccf..76f5486ff089f8edb99e7767ee3ca4abb270e885 100644 (file)
@@ -1,5 +1,6 @@
 /*
-  Copyright (C) 2000-2005 SKYRIX Software AG
+  Copyright (C) 2000-2007 SKYRIX Software AG
+  Copyright (C) 2007      Helge Hess
 
   This file is part of SOPE.
 
@@ -35,13 +36,15 @@ static int _decodeOfModifiedUTF7(unsigned char *_target, unsigned _targetLen,
 @implementation NSString(Imap4)
 
 - (NSString *)stringByEncodingImap4FolderName {
-  /* doof.d& --> doof.d&- */
+  // TBD: this is restricted to Latin1, should be fixed to UTF-8
+  /* dude.d& --> dude.d&- */
   unsigned char *buf    = NULL;
   unsigned char *res    = NULL;
   unsigned int  len     = 0;
   unsigned int  cnt     = 0;
   unsigned int  cntRes  = 0;
   NSString      *result = nil;
+  NSData        *data;
 
   len = [self cStringLength];
   buf = calloc(len + 3, sizeof(char));  
@@ -86,30 +89,37 @@ static int _decodeOfModifiedUTF7(unsigned char *_target, unsigned _targetLen,
 
           length = cnt - start + 1;
           
-          _encodeToModifiedUTF7(buf+start, length, &res, &cntRes);
+          _encodeToModifiedUTF7(buf + start, length, &res, &cntRes);
           
-          res[cntRes++] = '-';
+          res[cntRes] = '-';
+         cntRes++;
           cnt++;
         }
       }
     }
   }
-  result = [[NSString alloc] initWithCStringNoCopy:(char *)res
-                            length:cntRes
-                            freeWhenDone:YES];
-  free(buf); buf = NULL;
+  if (buf != NULL) free(buf); buf = NULL;
+
+  data = [[NSData alloc] initWithBytesNoCopy:res length:cntRes 
+                        freeWhenDone:YES];
+  result = [[NSString alloc] initWithData:data
+                            encoding:NSISOLatin1StringEncoding];
+  [data release]; data = nil;
+  
   return [result autorelease];
 }
 
 - (NSString *)stringByDecodingImap4FolderName {
-  /* doof/d&- --> doof/d& */
-  unsigned char *buf    = NULL;
-  unsigned char *res    = NULL;
-  unsigned int  len     = 0;
+  // TBD: this is restricted to Latin1, should be fixed to UTF-8
+  /* dude/d&- --> dude/d& */
+  unsigned char *buf;
+  unsigned char *res;
+  unsigned int  len;
   unsigned int  cnt     = 0;
   unsigned int  cntRes  = 0;
   NSString      *result = nil;
-
+  NSData        *data;
+  
   if ((len = [self cStringLength]) == 0)
     return @"";
   
@@ -164,10 +174,14 @@ static int _decodeOfModifiedUTF7(unsigned char *_target, unsigned _targetLen,
   if (cnt < len)
     res[cntRes++] = buf[cnt++];
   
-  result = [[NSString alloc] initWithCStringNoCopy:(char *)res
-                             length:cntRes
-                             freeWhenDone:YES];
-  if (buf) free(buf); buf = NULL;
+  if (buf != NULL) free(buf); buf = NULL;
+
+  data = [[NSData alloc] initWithBytesNoCopy:res length:cntRes 
+                        freeWhenDone:YES];
+  result = [[NSString alloc] initWithData:data
+                            encoding:NSISOLatin1StringEncoding];
+  [data release]; data = nil;
+  
   return [result autorelease];
 }
 
index 0a9b81c9f5a0987816dae34e70cac62eac43bc56..fbc4ca5b0fb09525fc52f124853f725ec87bd561 100644 (file)
@@ -2,7 +2,7 @@
 
 MAJOR_VERSION:=4
 MINOR_VERSION:=7
-SUBMINOR_VERSION:=248
+SUBMINOR_VERSION:=249
 
 # v4.5.214 requires libNGExtensions v4.5.146
 # v4.2.149 requires libNGStreams    v4.2.34