From: Daniele Varrazzo Date: Sun, 19 Jul 2026 23:01:13 +0000 (+0200) Subject: fix: raise DataError on malformed data in multirange binary loading X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;p=thirdparty%2Fpsycopg.git fix: raise DataError on malformed data in multirange binary loading Close #1358 --- diff --git a/psycopg/psycopg/types/multirange.py b/psycopg/psycopg/types/multirange.py index 3a3e8956c..a3d741735 100644 --- a/psycopg/psycopg/types/multirange.py +++ b/psycopg/psycopg/types/multirange.py @@ -342,14 +342,20 @@ class MultirangeBinaryLoader(BaseMultirangeLoader[T]): format = Format.BINARY def load(self, data: Buffer) -> Multirange[T]: + if len(data) < 4: + raise e.DataError(f"invalid multirange data: len = {len(data)}") + nelems = unpack_len(data, 0)[0] pos = 4 out = Multirange[T]() - for i in range(nelems): - length = unpack_len(data, pos)[0] - pos += 4 - out.append(load_range_binary(data[pos : pos + length], self._load)) - pos += length + try: + for i in range(nelems): + length = unpack_len(data, pos)[0] + pos += 4 + out.append(load_range_binary(data[pos : pos + length], self._load)) + pos += length + except Exception as ex: + raise e.DataError(f"invalid multirange data: {type(ex).__name__} - {ex}") if pos != len(data): raise e.DataError("unexpected trailing data in multirange")