diff --git a/radicale/storage.py b/radicale/storage.py index 29fa043..3ea67ad 100644 --- a/radicale/storage.py +++ b/radicale/storage.py @@ -380,12 +380,25 @@ class Collection(BaseCollection): for oitem in items[i+1:]: if getattr(oitem, "uid", None) == uid: new_collection.add(oitem) - self.upload(uuid4().hex, new_collection) + if uid and is_safe_filesystem_path_component(uid.value): + href = uid.value + else: + href = uuid4().hex + if not href.lower().endswith(".ics"): + href += ".ics" + self.upload(href, new_collection) elif tag == "VCARD": self.set_meta("tag", "VADDRESSBOOK") if collection: for card in collection: - self.upload(uuid4().hex, card) + uid = getattr(card, "uid", None) + if uid and is_safe_filesystem_path_component(uid.value): + href = uid.value + else: + href = uuid4().hex + if not href.lower().endswith(".vcf"): + href += ".vcf" + self.upload(href, card) return self def list(self):