From 1cfd3fd95b11c1b20e167ec288eb5e11ee3f6d29 Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Sat, 17 Sep 2016 16:53:24 +0200 Subject: [PATCH] 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' --- radicale/storage.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/radicale/storage.py b/radicale/storage.py index a67fbf9f..d82c7362 100644 --- a/radicale/storage.py +++ b/radicale/storage.py @@ -718,7 +718,18 @@ class Collection(BaseCollection): break return collection.serialize() 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 "" _lock = threading.Lock()