diff --git a/pymilvus/client/utils.py b/pymilvus/client/utils.py index 9e51ad1c7..f6fa2831b 100644 --- a/pymilvus/client/utils.py +++ b/pymilvus/client/utils.py @@ -159,14 +159,16 @@ def check_invalid_binary_vector(entities: List) -> bool: if not isinstance(entity["values"], list) or len(entity["values"]) == 0: return False - dim = len(entity["values"][0]) * 8 + first = entity["values"][0] + if not isinstance(first, bytes): + return False + + dim = len(first) * 8 if dim == 0: return False for values in entity["values"]: - if len(values) * 8 != dim: - return False - if not isinstance(values, bytes): + if not isinstance(values, bytes) or len(values) * 8 != dim: return False return True diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index fc82fdaa0..56e531ac4 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -255,6 +255,16 @@ def test_non_bytes_values(self): entities = [{"type": DataType.BINARY_VECTOR, "values": [[0, 1], [2, 3]]}] assert utils.check_invalid_binary_vector(entities) is False + def test_non_sized_values(self): + entities = [{"type": DataType.BINARY_VECTOR, "values": [None]}] + assert utils.check_invalid_binary_vector(entities) is False + + entities = [{"type": DataType.BINARY_VECTOR, "values": [1, 2]}] + assert utils.check_invalid_binary_vector(entities) is False + + entities = [{"type": DataType.BINARY_VECTOR, "values": [b"\x00\x01", None]}] + assert utils.check_invalid_binary_vector(entities) is False + def test_empty_values(self): entities = [{"type": DataType.BINARY_VECTOR, "values": []}] assert utils.check_invalid_binary_vector(entities) is False