Ver Fonte

Verify number of components in items

Unrud há 8 anos atrás
pai
commit
4f831de006
2 ficheiros alterados com 9 adições e 2 exclusões
  1. 4 1
      radicale/__init__.py
  2. 5 1
      radicale/storage.py

+ 4 - 1
radicale/__init__.py

@@ -814,7 +814,10 @@ class Application:
                 return PRECONDITION_FAILED
 
             try:
-                items = list(vobject.readComponents(content or ""))
+                items = tuple(vobject.readComponents(content or ""))
+                if not write_whole_collection and len(items) != 1:
+                    raise RuntimeError(
+                        "Content contains %d components" % len(items))
                 for i in items:
                     storage.check_and_sanitize_item(
                         i, is_collection=write_whole_collection, uid=item.uid

+ 5 - 1
radicale/storage.py

@@ -362,7 +362,11 @@ class Item:
     def item(self):
         if self._item is None:
             try:
-                self._item = vobject.readOne(self._text)
+                items = tuple(vobject.readComponents(self._text))
+                if len(items) != 1:
+                    raise RuntimeError(
+                        "Content contains %d components" % len(items))
+                self._item = items[0]
             except Exception as e:
                 raise RuntimeError("Failed to parse item %r from %r: %s" %
                                    (self.href, self.collection.path, e)) from e