From 1eb14423de50d9a0ba2af8ba688c09d1a6b30b94 Mon Sep 17 00:00:00 2001 From: rtmalikian Date: Sat, 20 Jun 2026 08:28:06 -0700 Subject: [PATCH] fix: reject bool values in ConnectionConfig int validators Python's bool is a subclass of int, so isinstance(True, int) returns True. This allowed True/False to pass validation for session pool settings (connections, maxsize, retries, timeout). Add 'and not isinstance(x, bool)' guard to all four validators in ConnectionConfig.__post_init__ and to the check_number() helper in util.py. Fixes #2076 Signed-off-by: rtmalikian --- weaviate/config.py | 16 ++++++++++++---- weaviate/util.py | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/weaviate/config.py b/weaviate/config.py index 154eff951..d4ce8533c 100644 --- a/weaviate/config.py +++ b/weaviate/config.py @@ -14,19 +14,27 @@ class ConnectionConfig: session_pool_timeout: int = 5 def __post_init__(self) -> None: - if not isinstance(self.session_pool_connections, int): + if not isinstance(self.session_pool_connections, int) or isinstance( + self.session_pool_connections, bool + ): raise TypeError( f"session_pool_connections must be {int}, received {type(self.session_pool_connections)}" ) - if not isinstance(self.session_pool_maxsize, int): + if not isinstance(self.session_pool_maxsize, int) or isinstance( + self.session_pool_maxsize, bool + ): raise TypeError( f"session_pool_maxsize must be {int}, received {type(self.session_pool_maxsize)}" ) - if not isinstance(self.session_pool_max_retries, int): + if not isinstance(self.session_pool_max_retries, int) or isinstance( + self.session_pool_max_retries, bool + ): raise TypeError( f"session_pool_max_retries must be {int}, received {type(self.session_pool_max_retries)}" ) - if not isinstance(self.session_pool_timeout, int): + if not isinstance(self.session_pool_timeout, int) or isinstance( + self.session_pool_timeout, bool + ): raise TypeError( f"session_pool_timeout must be {int}, received {type(self.session_pool_timeout)}" ) diff --git a/weaviate/util.py b/weaviate/util.py index 7ee9e5566..a5b35e6aa 100644 --- a/weaviate/util.py +++ b/weaviate/util.py @@ -672,7 +672,7 @@ def _get_valid_timeout_config( """ def check_number(num: Union[NUMBER, Tuple[NUMBER, NUMBER], None]) -> bool: - return isinstance(num, float) or isinstance(num, int) + return isinstance(num, float) or (isinstance(num, int) and not isinstance(num, bool)) if (isinstance(timeout_config, float) or isinstance(timeout_config, int)) and not isinstance( timeout_config, bool