Re: Fix for fragile code in ltree/crc32.c

From: Rithvika Devisetti <devisettirithvika(at)gmail(dot)com>
To: Jeff Davis <pgsql(at)j-davis(dot)com>
Cc: Heikki Linnakangas <hlinnaka(at)iki(dot)fi>, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Fix for fragile code in ltree/crc32.c
Date: 2026-08-22 06:04:49
Message-ID: CA+HR5vi_BV9X6QxBbdYgnBd1x+heJcnLSU_fWrSYfa71JRNtsA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, 2026-08-20 at 13:32 -0700, Jeff Davis wrote:
> Attached two patches. The first one is the same and backpatches through
> 18. The second defines some new macros and uses those, which is a
> better place to document the limits, and I'll only commit that one to
> master.

I applied both v2 patches and tested them on macOS 15 (aarch64,
clang 21), built with meson and --enable-cassert. Reporting results in
case an independent check on a non-Linux platform is useful.

Full test suite passes: 360 tests OK, 0 failures. The 40 skips are all
PG_TEST_EXTRA opt-ins (ssl, ldap, oauth, load_balance,
libpq_encryption, xid_wraparound). I ran saslprep separately with
PG_TEST_EXTRA=saslprep and it passes as well.

To exercise the changed path specifically, I used a database with
LOCALE_PROVIDER builtin / BUILTIN_LOCALE 'PG_UNICODE_FAST' and checked
the expanding case mappings:

upper('ß') -> 'SS' (2 codepoints)
upper('ffl') -> 'FFL' (3 codepoints)
upper('ΐ') -> 3 codepoints
upper('ῷ') -> 3 codepoints
casefold('ß') -> 'ss'

and drove ltree_crc32_sz() via ltree tables with GiST and btree indexes
over 1000 rows. No assertion failures from the new
Assert(foldlen < sizeof(foldstr)).

Regards,
Rithvika Devisetti

On Thu, Aug 20, 2026 at 1:32 PM Jeff Davis <pgsql(at)j-davis(dot)com> wrote:

> On Wed, 2026-08-19 at 10:44 +0300, Heikki Linnakangas wrote:
> > Looking at pg_strfold() (and other similar functions), there's no
> > indication that there's an upper bound on the destination size like
> > this. Does UNICODE_CASEMAP_BUFSZ work for all collation providers and
> > locales? How about adding a comment in pg_strfold() and friends about
> > that?
>
> Attached two patches. The first one is the same and backpatches through
> 18. The second defines some new macros and uses those, which is a
> better place to document the limits, and I'll only commit that one to
> master.
>
> Along with the Case Mapping Complexities comment I'm adding here:
>
>
> https://www.postgresql.org/message-id/fe35594a54923c94142390dabb365b737c581f2a.camel@j-davis.com
>
> (which will be backpatched to 18), I think that should be sufficient,
> but I could add another note there about the byte limits if you think
> it would be worthwhile.
>
> Regards,
> Jeff Davis
>
>

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Shinya Kato 2026-08-22 06:39:04 Re: Add autovacuum_warning to surface concurrent vacuum collisions
Previous Message Tom Lane 2026-08-22 01:15:52 Re: Wrong results from join removal with DISTINCT ON + SRF subquery