Re: BUG #19780: gtsvector_picksplit() reads uninitialized data when called with three entries

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: shihao zhong <zhong950419(at)gmail(dot)com>
Cc: exclusion(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #19780: gtsvector_picksplit() reads uninitialized data when called with three entries
Date: 2026-11-06 08:16:37
Message-ID: au2M5c6TISykG8QR@paquier.xyz
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Fri, Nov 06, 2026 at 04:52:21PM +0900, Michael Paquier wrote:
> So the problem is this one, where we could try to read the cached data
> for seed_2 but it's just not initialized yet:
> datum_r = gtsvector_alloc(SIGNKEY | (cache[seed_2].allistrue ?
> ALLISTRUE : 0), siglen, cache[seed_2].sign);
>
> Calling fillcache() earlier so as datum_r and datum_l are built from
> correct values is enough. Your change makes sense.

+INSERT INTO test_tsvector_wide
+ SELECT 'foo', decode(string_agg(md5(g::text), ''), 'hex')
+ FROM generate_series(1, 300) g;

By the way, this test is going to piss buildfarm members that have
FIPS enabled, where md5() calls fail. Could it be possible to write a
test that's more portable across the board? There is a v19 RC2 in
sight, and it's already late in the week here so this will have to
wait until the tag of the next version is pushed around next
Wednesday. It's an old issue, so a few more days will not matter.

There is a fipshash() in test_setup.sql, written for portability, but
perhaps we can make the test much faster by using the same tricks as
test_decoding's toast.sql in terms of generation of long values?
--
Michael

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Amit Langote 2026-11-06 08:34:26 Re: BUG #19768: JSON_TABLE: row/text comparisons in context item or PASSING give wrong results or spurious collation
Previous Message Michael Paquier 2026-11-06 07:52:21 Re: BUG #19780: gtsvector_picksplit() reads uninitialized data when called with three entries