diff --git a/pymilvus/client/utils.py b/pymilvus/client/utils.py index 9e51ad1c7..5b7dc4de2 100644 --- a/pymilvus/client/utils.py +++ b/pymilvus/client/utils.py @@ -159,15 +159,18 @@ def check_invalid_binary_vector(entities: List) -> bool: if not isinstance(entity["values"], list) or len(entity["values"]) == 0: return False + if not isinstance(entity["values"][0], bytes): + return False + dim = len(entity["values"][0]) * 8 if dim == 0: return False for values in entity["values"]: - if len(values) * 8 != dim: - return False if not isinstance(values, bytes): return False + if len(values) * 8 != dim: + return False return True diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index fc82fdaa0..f620df630 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -259,6 +259,18 @@ def test_empty_values(self): entities = [{"type": DataType.BINARY_VECTOR, "values": []}] assert utils.check_invalid_binary_vector(entities) is False + def test_non_sized_value(self): + entities = [{"type": DataType.BINARY_VECTOR, "values": [b"\x00\x01", None]}] + assert utils.check_invalid_binary_vector(entities) is False + + def test_non_sized_first_value(self): + entities = [{"type": DataType.BINARY_VECTOR, "values": [None, b"\x00\x01"]}] + assert utils.check_invalid_binary_vector(entities) is False + + def test_all_non_sized_values(self): + entities = [{"type": DataType.BINARY_VECTOR, "values": [1, 2]}] + assert utils.check_invalid_binary_vector(entities) is False + class TestSparseParseSingleRow: def test_basic_parsing(self):