]> err.no Git - sope/blobdiff - sope-ical/versitSaxDriver/VSSaxDriver.m
improved error handling
[sope] / sope-ical / versitSaxDriver / VSSaxDriver.m
index 2e1f6262f71fb5e59ac972d1d0cf7619f7063d3e..0866c87a0d70f43598e710fb2741f1d24eb5499c 100644 (file)
@@ -679,6 +679,11 @@ static VSStringFormatter *stringFormatter = nil;
   NSMutableArray *tagAttributes;
   NSRange        r, todoRange;
   unsigned       length;
+  
+#if 0
+  if (debugOn)
+    NSLog(@"%s: parse line: '%@'", __PRETTY_FUNCTION__, _line);
+#endif
 
   length    = [_line length];
   todoRange = NSMakeRange(0, length);
@@ -686,9 +691,15 @@ static VSStringFormatter *stringFormatter = nil;
              options:0
              range:todoRange];
   /* is line well-formed? */
-  if (r.length == 0) {
-    [self reportError:[@"got an improper content line! ->\n" 
-                 stringByAppendingString:_line]];
+  if (r.length == 0 || r.location == 0) {
+    NSLog(@"todo-range: %i-%i, range: %i-%i, length %i, str-class %@",
+          todoRange.location, todoRange.length,
+          r.location, r.length,
+          length, NSStringFromClass([_line class]));
+
+    [self reportError:
+            [@"got an improper content line! (did not find colon) ->\n" 
+              stringByAppendingString:_line]];
     return;
   }
   
@@ -696,6 +707,12 @@ static VSStringFormatter *stringFormatter = nil;
   tagName       = [[_line substringToIndex:r.location] uppercaseString];
   tagAttributes = [[NSMutableArray alloc] initWithCapacity:16];
   
+  if (debugOn && ([tagName length] == 0)) {
+    [self reportError:[@"got an improper content line! ->\n" 
+                 stringByAppendingString:_line]];
+    return;
+  }
+  
   /* 
      possible shortcut: if we spotted a ':', we don't have to do "expensive"
      argument scanning/processing.
@@ -759,12 +776,23 @@ static VSStringFormatter *stringFormatter = nil;
   }
   tagValue = [_line substringFromIndex:NSMaxRange(r)];
   
+  if (debugOn && ([tagName length] == 0)) {
+    NSLog(@"%s: missing tagname in line: '%@'", 
+          __PRETTY_FUNCTION__, _line);
+  }
+  
   /*
     At this point we have:
-      name:      'BEGIN', 'TEL', 'EMAIL', 'ITEM1.ADR' etc
-      value:     ';;;Magdeburg;;;Germany'
-      atributes: ("type=INTERNET", "type=HOME", "type=pref")
+      name:       'BEGIN', 'TEL', 'EMAIL', 'ITEM1.ADR' etc
+      value:      ';;;Magdeburg;;;Germany'
+      attributes: ("type=INTERNET", "type=HOME", "type=pref")
   */
+
+#if 0
+#  warning DEBUG LOG ENABLED
+  NSLog(@"TAG: %@, value %@ attrs %@",
+        tagName, tagValue, tagAttributes);
+#endif
   
   /* process tag */
   
@@ -779,7 +807,13 @@ static VSStringFormatter *stringFormatter = nil;
     [self _endComponent:tagName value:tagValue];
   }
   else {
-    // TODO: make this more generic, this one is used with Outlook vCards
+    /* a regular content tag */
+    
+    /* 
+       check whether the tga value is encoded in quoted printable,
+       this one is used with Outlook vCards (see data/ for examples)
+    */
+    // TODO: make the encoding check more generic
     if ([tagAttributes containsObject:@"ENCODING=QUOTED-PRINTABLE"]) {
       // TODO: QP is charset specific! The one below decodes in Unicode!
       tagValue = [tagValue stringByDecodingQuotedPrintable];