Browse Source

filter broken vcard entries before delivered, found on real life system at least 2 cards where vobject claimed about
vobject.base.ValidateError: 'VCARD components must contain at least 1 N'

Peter Bieringer 9 years ago
parent
commit
1cfd3fd95b
1 changed files with 12 additions and 1 deletions
  1. 12 1
      radicale/storage.py

+ 12 - 1
radicale/storage.py

@@ -718,7 +718,18 @@ class Collection(BaseCollection):
                         break
                         break
             return collection.serialize()
             return collection.serialize()
         elif self.get_meta("tag") == "VADDRESSBOOK":
         elif self.get_meta("tag") == "VADDRESSBOOK":
-            return "".join([item.serialize() for item in items])
+            self.logger.debug("Try to serialize VADDRESSBOOK")
+            items_ok = []
+            result = ""
+            for item in items:
+                try:
+                    item.serialize()
+                    items_ok.append(item)
+                except:
+                    self.logger.exception("VCARD broken (skip): %s", item)
+            result = "".join([item.serialize() for item in items_ok])
+            self.logger.debug("Try to return VADDRESSBOOK")
+            return result
         return ""
         return ""
 
 
     _lock = threading.Lock()
     _lock = threading.Lock()