]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Added guard for negative numbers in load_row
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 26 Dec 2020 18:07:38 +0000 (19:07 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 27 Dec 2020 16:14:47 +0000 (17:14 +0100)
Also added a reminder to review the C implementation for performance.

psycopg3/psycopg3/_transform.py
psycopg3_c/psycopg3_c/transform.pyx

index 55e6c187c8ae787884de04ae6ba65914df09a591..6e1ce6f6fd004f493323ddd097395c80bec23247 100644 (file)
@@ -131,7 +131,7 @@ class Transformer(AdaptContext):
         if not res:
             return None
 
-        if row >= self._ntuples:
+        if not 0 <= row < self._ntuples:
             return None
 
         rv: List[Any] = [None] * self._nfields
index d1947edcd05e95311021d3aac6cdde5ebdcdc8ff..e0b4b7d38040ee445b8add97fce53b0c590b484e 100644 (file)
@@ -151,7 +151,7 @@ cdef class Transformer:
             return None
 
         cdef int crow = row
-        if crow >= self._ntuples:
+        if not 0 <= crow < self._ntuples:
             return None
 
         cdef libpq.PGresult *res = self._pgresult.pgresult_ptr
@@ -170,6 +170,9 @@ cdef class Transformer:
                     continue
 
             val = libpq.PQgetvalue(res, crow, col)
+            # TODO: the is some visible python churn around this lookup.
+            # replace with a C array of borrowed references pointing to
+            # the cloader.cload function pointer
             loader = self._row_loaders[col]
             if loader.cloader is not None:
                 pyval = loader.cloader.cload(val, length)