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.
This commit is contained in:
Thomas Waldmann 2017-02-20 07:38:55 +01:00
parent 63d4cf4c82
commit 8d7dfe739f
1 changed files with 4 additions and 4 deletions

View File

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