Skip to content

Commit 61362e7

Browse files
fix unbounded integer encoding in blobs
1 parent 392d56a commit 61362e7

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

datajoint/blob.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ def pack_array(self, array):
221221
if is_complex:
222222
array, imaginary = np.real(array), np.imag(array)
223223
type_id = (rev_class_id[array.dtype] if array.dtype.char != 'U'
224-
else rev_class_id[np.dtype('O')])
224+
else rev_class_id[np.dtype('O')])
225225
if dtype_list[type_id] is None:
226226
raise DataJointError("Type %s is ambiguous or unknown" % array.dtype)
227227

@@ -264,11 +264,13 @@ def read_sparse_array(self):
264264
raise DataJointError('datajoint-python does not yet support sparse arrays. Issue (#590)')
265265

266266
def read_int(self):
267-
return int.from_bytes(self.read_value('int64'), byteorder='little', signed=True)
267+
return int.from_bytes(self.read_binary(self.read_value('uint16')), byteorder='little', signed=True)
268268

269269
@staticmethod
270270
def pack_int(v):
271-
return b"\x0a" + v.to_bytes(v.bit_length() // 8 + 1, byteorder='little', signed=True)
271+
n_bytes = v.bit_length() // 8 + 1
272+
assert n_bytes <= 0xFFFF, 'Integers are limited to 65535 bytes'
273+
return b"\x0a" + np.uint16(n_bytes).tobytes() + v.to_bytes(n_bytes, byteorder='little', signed=True)
272274

273275
def read_bool(self):
274276
return bool(self.read_value('bool'))
@@ -309,7 +311,7 @@ def pack_string(s):
309311

310312
def read_bytes(self):
311313
return self.read_binary(self.read_value())
312-
314+
313315
@staticmethod
314316
def pack_bytes(s):
315317
return b"\6" + len_u64(s) + s

0 commit comments

Comments
 (0)