Re: BUG #19341: REPLACE() fails to match final character when using nondeterministic ICU collation

From: Laurenz Albe <laurenz(dot)albe(at)cybertec(dot)at>
To: adam(dot)warland(at)infor(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #19341: REPLACE() fails to match final character when using nondeterministic ICU collation
Date: 2025-12-02 16:24:54
Message-ID: 60b467ac47d5c6bbb9c21c3bdfecce8e5de60cda.camel@cybertec.at
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Tue, 2025-12-02 at 10:03 +0000, PG Bug reporting form wrote:
> PostgreSQL version: 18.1
>
> When using a nondeterministic ICU collation, the replace() function fails to
> replace a substring when that substring appears at the end of the input
> string.
>
> Occurrences of the same substring earlier in the string are replaced
> normally.
>
> Specific collation used:
> create collation test_nondeterministic (
> provider = icu,
> locale = 'und-u-ks-level2',
> deterministic = false
> )
>
> -- Replace final character under nondeterministic collation
> SELECT replace(
> 'testx' COLLATE "test_nondeterministic",
> 'x' COLLATE "test_nondeterministic",
> 'y') AS res1;

I can reproduce the problem, and the attached patch fixes it for me.

I am not certain if it is safe to apply pg_mblen() to "haystack_end", though.

Yours,
Laurenz Albe

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Laurenz Albe 2025-12-02 16:31:54 Re: BUG #19341: REPLACE() fails to match final character when using nondeterministic ICU collation
Previous Message Oleg Ivanov 2025-12-02 14:05:23 Re: BUG #19340: Wrong result from CORR() function