2
0
Эх сурвалжийг харах

Verify object ns and id when reading bands

Jonas Borgström 14 жил өмнө
parent
commit
9683b2ea82
1 өөрчлөгдсөн 7 нэмэгдсэн , 5 устгасан
  1. 7 5
      darc/store.py

+ 7 - 5
darc/store.py

@@ -181,7 +181,7 @@ class Store(object):
     def get(self, ns, id):
         try:
             band, offset = self.get_index(ns)[id]
-            return self.io.read(band, offset)
+            return self.io.read(band, offset, ns, id)
         except KeyError:
             raise self.DoesNotExist
 
@@ -205,8 +205,8 @@ class Store(object):
             raise self.DoesNotExist
 
     def list(self, ns, marker=None, limit=1000000):
-        return [key for (key, value) in
-                self.get_index(ns).iteritems(marker=marker, limit=limit)]
+        return (key for (key, value) in
+                self.get_index(ns).iteritems(marker=marker, limit=limit))
 
 
 class BandIO(object):
@@ -259,12 +259,14 @@ class BandIO(object):
             if not missing_ok or e.errno != errno.ENOENT:
                 raise
 
-    def read(self, band, offset):
+    def read(self, band, offset, ns, id):
         fd = self.get_fd(band)
         fd.seek(offset)
         data = fd.read(self.header_fmt.size)
-        size, magic, hash, ns, id = self.header_fmt.unpack(data)
+        size, magic, hash, ns_, id_ = self.header_fmt.unpack(data)
         assert magic == 0
+        assert ns == ns_
+        assert id == id_
         data = fd.read(size - self.header_fmt.size)
         if crc32(data) & 0xffffffff != hash:
             raise IntegrityError('Band checksum mismatch')