Browse Source

fix ChunkIndex.__contains__ assertion for big-endian archs

also: add some missing assertion messages

severity:

- no issue on little-endian platforms (== most, including x86/x64)
- harmless even on big-endian as long as refcount is below 0xfffbffff,
  which is very likely always the case in practice anyway.
Thomas Waldmann 8 years ago
parent
commit
c96cd1adc5
1 changed files with 4 additions and 4 deletions
  1. 4 4
      borg/hashindex.pyx

+ 4 - 4
borg/hashindex.pyx

@@ -216,7 +216,7 @@ cdef class ChunkIndex(IndexBase):
         if not data:
             raise KeyError(key)
         cdef uint32_t refcount = _le32toh(data[0])
-        assert refcount <= _MAX_VALUE
+        assert refcount <= _MAX_VALUE, "invalid reference count"
         return refcount, _le32toh(data[1]), _le32toh(data[2])
 
     def __setitem__(self, key, value):
@@ -234,7 +234,7 @@ cdef class ChunkIndex(IndexBase):
         assert len(key) == self.key_size
         data = <uint32_t *>hashindex_get(self.index, <char *>key)
         if data != NULL:
-            assert data[0] <= _MAX_VALUE
+            assert _le32toh(data[0]) <= _MAX_VALUE, "invalid reference count"
         return data != NULL
 
     def incref(self, key):
@@ -312,8 +312,8 @@ cdef class ChunkIndex(IndexBase):
         if values:
             refcount1 = _le32toh(values[0])
             refcount2 = _le32toh(data[0])
-            assert refcount1 <= _MAX_VALUE
-            assert refcount2 <= _MAX_VALUE
+            assert refcount1 <= _MAX_VALUE, "invalid reference count"
+            assert refcount2 <= _MAX_VALUE, "invalid reference count"
             result64 = refcount1 + refcount2
             values[0] = _htole32(min(result64, _MAX_VALUE))
         else: