]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
fix: raise DataError on malformed data in multirange binary loading master
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 19 Jul 2026 23:01:13 +0000 (01:01 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Mon, 20 Jul 2026 01:02:14 +0000 (03:02 +0200)
Close #1358

psycopg/psycopg/types/multirange.py

index 3a3e8956c381244d9e2913e750b8c2a3d0da8898..a3d741735013fd8b3efbe27db3ecb810cbebf8fb 100644 (file)
@@ -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")