Thread

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

    Laurenz Albe <laurenz.albe@cybertec.at> — 2025-12-02T16:24:54Z

    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