From: Daniele Varrazzo Date: Sat, 26 Dec 2020 18:07:38 +0000 (+0100) Subject: Added guard for negative numbers in load_row X-Git-Tag: 3.0.dev0~241 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a6f4b40f8ca6e1aa4109b1b79da0233cc4ed74b9;p=thirdparty%2Fpsycopg.git Added guard for negative numbers in load_row Also added a reminder to review the C implementation for performance. --- diff --git a/psycopg3/psycopg3/_transform.py b/psycopg3/psycopg3/_transform.py index 55e6c187c..6e1ce6f6f 100644 --- a/psycopg3/psycopg3/_transform.py +++ b/psycopg3/psycopg3/_transform.py @@ -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 diff --git a/psycopg3_c/psycopg3_c/transform.pyx b/psycopg3_c/psycopg3_c/transform.pyx index d1947edcd..e0b4b7d38 100644 --- a/psycopg3_c/psycopg3_c/transform.pyx +++ b/psycopg3_c/psycopg3_c/transform.pyx @@ -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)