]> err.no Git - sope/commitdiff
fixed OGo bug #1856, added new NSData category
authorhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Fri, 1 Jun 2007 10:38:18 +0000 (10:38 +0000)
committerhelge <helge@e4a50df8-12e2-0310-a44c-efbce7f8a7e3>
Fri, 1 Jun 2007 10:38:18 +0000 (10:38 +0000)
git-svn-id: http://svn.opengroupware.org/SOPE/trunk@1496 e4a50df8-12e2-0310-a44c-efbce7f8a7e3

sope-mime/ChangeLog
sope-mime/NGMime/ChangeLog
sope-mime/NGMime/NGMimePartParser.h
sope-mime/NGMime/NGMimePartParser.m
sope-mime/Version

index b27a32784b6cf0c9d45a1e5cd022cbb73fb23ebe..33e50a0457d3d9b509ead530de8ed86ae93bdb51 100644 (file)
@@ -1,3 +1,8 @@
+2007-06-01  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGMime: code refactoring, fixed OGo bug #1856 (QP decoding)
+         (v4.7.248)
+
 2007-05-28  Helge Hess  <helge.hess@opengroupware.org>
 
        * NGMime: fixed compilation on gnustep-base (v4.7.247)
index 8f6b30a788d558b89597c86d222f32bbc86a2f49..34caa2d0c61015d348544b7cf9ab7da3351ec01d 100644 (file)
@@ -1,3 +1,9 @@
+2007-06-01  Helge Hess  <helge.hess@opengroupware.org>
+
+       * NGMimePartParser.m: moved processing of content-transfer-encoding
+         to an NSData category, fixed OGo bug #1856 (use correct quoted
+         printable decoder!)
+
 2007-05-28  Helge Hess  <helge.hess@opengroupware.org>
 
        * NGMimeTextBodyGenerator.m: fixed compilation on gnustep-base
index 7e852385cad9aed7ff15a581c0ede7c35b647d8b..4ce8b96f2b64dfed7a2918ee59202f5b09eefdbc 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.
 
@@ -24,6 +25,7 @@
 
 #import <Foundation/NSObject.h>
 #import <Foundation/NSString.h>
+#import <Foundation/NSData.h>
 #import <NGStreams/NGStreamProtocols.h>
 #include <NGMime/NGPart.h>
 #include <NGMime/NGMimeHeaderFieldParser.h>
@@ -282,4 +284,10 @@ typedef struct _NGMimeHeaderNames {
 
 @end
 
+@interface NSData(MIMEContentTransferEncoding)
+
+- (NSData *)dataByApplyingMimeContentTransferEncoding:(NSString *)_enc;
+
+@end
+
 #endif /* __NGMime_NGMimePartParser_H__ */
index b71681f019e29e616e0a13a4e2664b2b65628c4f..f717c422c9b724ea1905e9fad94e16020deca0c6 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.
 
 /* this tunes, how big reused data cache objects may get (10MB) */
 #define MAX_DATA_OBJECT_SIZE_CACHE (10*1024*1024)
 
+@implementation NSData(MIMEContentTransferEncoding)
+
+- (NSData *)dataByApplyingMimeContentTransferEncoding:(NSString *)_enc {
+  // TODO: make this an NSData category
+  unsigned len;
+  unichar  c;
+  
+  if ((len = [_enc length]) == 0)
+    return self;
+  
+  _enc = [_enc lowercaseString];
+  
+  c = [_enc characterAtIndex:0];
+  switch (c) {
+  case 'q':
+    if ([_enc hasPrefix:@"quoted"])
+      return [self dataByDecodingQuotedPrintableTransferEncoding];
+    break;
+  case 'b':
+    if ([_enc hasPrefix:@"base64"])
+      return [self dataByDecodingBase64];
+    if ([@"binary" isEqualToString:_enc])
+      return self;
+    break;
+  case '7':
+  case '8':
+  case 'i':
+    if (len == 4) {
+      if ([@"7bit" isEqualToString:_enc])
+       return self;
+      if ([@"8bit" isEqualToString:_enc])
+       return self;
+      break;
+    }
+    else if (len == 8) {
+      if ([@"identity" isEqualToString:_enc])
+       return self;
+    }
+    
+  case 'u':
+    if (len == 12) {
+      if ([@"unknown-8bit" isEqualToString:_enc])
+        return self;
+    }
+  default:
+    break;
+  }
+  
+  [self warnWithFormat:@"%s: unknown content-transfer-encoding: '%@'", 
+       __PRETTY_FUNCTION__, _enc];
+  return nil;
+}
+
+@end /* NSData(MIMEContentTransferEncoding) */
+
+
 @implementation NGMimePartParser
 
 static Class StringClass  = Nil;
@@ -965,58 +1022,14 @@ static NSString *fieldNameForCString(id self, char *_cstring, int _len) {
 }
 
 - (NSData *)readBodyWithKnownLength:(unsigned)_len {
-  return (self->source)
+  return (self->source != nil)
     ? [self readBodyWithKnownLengthFromStream:_len]
     : [self readBodyWithKnownLengthFromData:_len];
 }
 
-- (NSData *)applyTransferEncoding:(NSString *)_encoding onData:(NSData *)_data{
-  // TODO: make this an NSData category
-  unsigned len;
-  unichar  c;
-  
-  if ((len = [_encoding length]) == 0)
-    return nil;
-  
-  _encoding = [_encoding lowercaseString];
-  
-  c = [_encoding characterAtIndex:0];
-  switch (c) {
-  case 'q':
-    if ([_encoding hasPrefix:@"quoted"])
-      return [_data dataByDecodingQuotedPrintable];
-    break;
-  case 'b':
-    if ([_encoding hasPrefix:@"base64"])
-      return [_data dataByDecodingBase64];
-    else if ([@"binary" isEqualToString:_encoding])
-      return _data;
-    break;
-  case '7':
-  case '8':
-  case 'i':
-    if (len == 4) {
-      if ([@"7bit" isEqualToString:_encoding])
-       return _data;
-      if ([@"8bit" isEqualToString:_encoding])
-       return _data;
-      break;
-    }
-    else if (len == 8) {
-      if ([@"identity" isEqualToString:_encoding])
-       return _data;
-    }
-
-  case 'u':
-    if (len == 12) {
-      if ([@"unknown-8bit" isEqualToString:_encoding])
-        return _data;
-    }
-  default:
-    break;
-  }
-  
-  return nil;
+- (NSData *)applyTransferEncoding:(NSString *)_enc onData:(NSData *)_data{
+  // Note: this method is used in WebUI
+  return [_data dataByApplyingMimeContentTransferEncoding:_enc];
 }
 
 - (NSData *)readBody {
index 83332567afa648d6a630c4342b89ebf20a7d5436..0a9b81c9f5a0987816dae34e70cac62eac43bc56 100644 (file)
@@ -2,7 +2,7 @@
 
 MAJOR_VERSION:=4
 MINOR_VERSION:=7
-SUBMINOR_VERSION:=247
+SUBMINOR_VERSION:=248
 
 # v4.5.214 requires libNGExtensions v4.5.146
 # v4.2.149 requires libNGStreams    v4.2.34