Fix out-of-bound read in gtsvector_picksplit()
authorMichael Paquier <[email protected]>
Mon, 4 Sep 2023 05:55:53 +0000 (14:55 +0900)
committerMichael Paquier <[email protected]>
Mon, 4 Sep 2023 05:55:53 +0000 (14:55 +0900)
This could lead to an imprecise choice when splitting an index page of a
GiST index on a tsvector, deciding which entries should remain on the
old page and which entries should move to a new page.

This is wrong since tsearch2 has been moved into core with commit
140d4ebcb46e, so backpatch all the way down.  This error has been
spotted by valgrind.

Author: Alexander Lakhin
Discussion: https://postgr.es/m/17950-6c80a8d2b94ec695@postgresql.org
Backpatch-through: 11

src/backend/utils/adt/tsgistidx.c

index c09eefdda23139b7b0bba6bc062eab404deddfe0..157cc4536bdb0a859b7b5d3be24d2b604bbf3b30 100644 (file)
@@ -728,7 +728,7 @@ gtsvector_picksplit(PG_FUNCTION_ARGS)
                size_alpha = SIGLENBIT(siglen) -
                    sizebitvec((cache[j].allistrue) ?
                               GETSIGN(datum_l) :
-                              GETSIGN(cache[j].sign),
+                              cache[j].sign,
                               siglen);
        }
        else
@@ -742,7 +742,7 @@ gtsvector_picksplit(PG_FUNCTION_ARGS)
                size_beta = SIGLENBIT(siglen) -
                    sizebitvec((cache[j].allistrue) ?
                               GETSIGN(datum_r) :
-                              GETSIGN(cache[j].sign),
+                              cache[j].sign,
                               siglen);
        }
        else