Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wNU2t-000qXq-24 for pgsql-bugs@arkaria.postgresql.org; Thu, 14 May 2026 11:16:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wNU2s-00Bt80-1Z for pgsql-bugs@arkaria.postgresql.org; Thu, 14 May 2026 11:16:02 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wNU2s-00Bt7r-0k for pgsql-bugs@lists.postgresql.org; Thu, 14 May 2026 11:16:02 +0000 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wNU2p-00000000YpV-3xEX for pgsql-bugs@lists.postgresql.org; Thu, 14 May 2026 11:16:01 +0000 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-2ba3b9bcf69so61935ad.0 for ; Thu, 14 May 2026 04:15:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1778757358; cv=none; d=google.com; s=arc-20240605; b=giHZHyEtRUMXJkWWGZ3Y/s2ziAVAPL1SqLCUq7H9AwNRziVmnlBCfM/wh2RF1r/tN/ jMqv+Rwy6TmxrWkh+6ivvZPH1jm5tSyYuwB7jw8hg5VH0JV2+4WQJTiH2DNVrK7/48iD g+MfQGnzjXh2z61eK7M5SwvgWzsYmNIoR5xB51X9HFt+CmHToNsi7WJhS4V14GMw/kEE C5eFDqUOds5tVxniY/qaWxGrJP0gUgtOHU39d6G29dm4ECNMvEhmj/DLkcr+F87p7q4y dxH6WQEYzvlTqqYtC/pL58in612tIERkizMn/ixltT0UjWV1UB9mjdJs8EOj2PgTTKHn GTwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=bzW8klxknaBTOHReYfxYNEWCFj8SFroO9LAq0/hpBv0=; fh=7fDr83P72frYqVD5Dw1zhqln2SWQobu+GahfeqMz2kw=; b=b4xcOHKeQ9XsTL5TVpe4PDc+Z/6wv+8aH3ZPdaT5gIt7vyzArj2x7quNYb+39r6cME SFh3jNtdyBBlzZ4NgKBlaEMqYLwsJ3ht3GJIMUA2fl673xHvqRbd0Jiys3Yzl7jslnj6 XBStMwrWNT+TzRAR77IWOkoCAHWiAJomZYLp78l7hI8WCa4YKJMlYRxJXlG5KGvBOhIv DvTJF/+391y0iy7pkgMFRtRfMq82ZhvSTp+3Y/6IpKYKdQ6eBCJRiY79RdI8ixvp37fA JuSMhnsVrqQkMjQTKL0jKQ59ma+WR1D03ik0qBCxHI+5XylhrM97A/jTqbGQziOap7wt TNWQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1778757358; x=1779362158; darn=lists.postgresql.org; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=bzW8klxknaBTOHReYfxYNEWCFj8SFroO9LAq0/hpBv0=; b=MMI6DlfXDa6dXzFl9nLMz6uJ1G6TSya7fmKUY1tB0UbzPJ6D1d9MLoScurxOlstrwe uZ98NF1zl2nMaZHC4Doqq90KwmDI4S3JYkyJJKC5xxTk2LyJeG5UgISXDWfpqnuOk3Z6 hARWAdo8HOLkS7mtMaMfdpZPEisXKamXGzggzYWVVuJOpZCmL+oSUun6tmRw4bEJ6ts5 taWvUtJn6hkQryQbBRXwUN3mLewHJO/WHSl9jBL6FqEE1G97hlwAaHtEXXTR0RrRdxFT 3IhGH+zE7EoyyAa7jpl6+qk9PVcS/37+Z4RMPYA+czJ6LR3zmXUdlXX2uY7zTyh4h3Lg eM1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778757358; x=1779362158; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=bzW8klxknaBTOHReYfxYNEWCFj8SFroO9LAq0/hpBv0=; b=K5V0U9puUmG2uC7c5EmZ48HWBJ8+qxEZadYdkc86jZO7PYA+ISLgh/OuJAUckqA/M2 II53PzyVYxHES3l4Yl4agIVWzVOJkHFVyOeyG59Kob7dxGrkIU81ljDSg/aYX224QOqp ZJOSFiCZWhNYGMY6Mvm0wY0m5rl0VrPmQ6p+T1X/EgNl4sQZuytzpvk8mp+8HfiXpLkw HUo4es31JxCWRT5J6jPtAZXB6Ia9eelMrhJ+sveenE2g7X2R46k9ZD6++8N7FVbWHYma USbLXSx7JJtEpgI83unG2MLAGULdixHb3wzGUat2zbjTrNVwMy/1+kpiZt27pAbQzx33 sipQ== X-Forwarded-Encrypted: i=1; AFNElJ8F290t3X4dMa+H4pl08HzUS3AcsR/eoKE5rXt8Swkk/sjU+B9dBVWBPkp22qD/qTcUGNKDNWWY0kOS@lists.postgresql.org X-Gm-Message-State: AOJu0Ywcq8GFZE7RpJjXORgNS8PxZbTE19h5hV6kLKV4rfK4HUcrqhki VNjFEfftDh9HnaKy0dHZAgxv2OAKvphn/Ia4aWPeFUWsgJBf3OhnCEaTsY5RlJmM0VXRMVe2YU1 n8DJeRgKgaBP7ARO8Ya+7ThwsEpRufmeSncTg/r2g X-Gm-Gg: Acq92OHrVCJiuZropcKB3QzkGl+wQtiOhrd/h8ofzSbEuuPG1ilW9L12CNjTHgJ/rOK mOZnwskZrfmeXnFCsnsbEOffrQkWcHD42xqv3xSySGMBieyO+tLo7ASUWv0k7lBLN6DQnJ8K1AE FTR2Cjqd46jHqbFvn8cNJXnmNFlyZ222BPgxIdnC328pgaKtR1WehXr6zmKNKtOgZaq7y7hHQRz d9aQstJhxcrYHukfwb02cR80Br2eL9s7mMlpucbt32+s4tmqRfQVj4qg+iUruNAldNZb4EBTbUo LYChf8quhrmjQt11BYF1ExupjFsZXp2jMZdF/W2GgBK4vuQl+iQlZ0riRQsN X-Received: by 2002:a17:903:30d5:b0:2b4:6153:e541 with SMTP id d9443c01a7336-2bd5e39851fmr1705935ad.3.1778757357058; Thu, 14 May 2026 04:15:57 -0700 (PDT) MIME-Version: 1.0 References: <19474-5b86a95f3d9a7ecb@postgresql.org> In-Reply-To: <19474-5b86a95f3d9a7ecb@postgresql.org> From: Nitin Motiani Date: Thu, 14 May 2026 16:45:45 +0530 X-Gm-Features: AVHnY4J40HKDqfQc4V3V20Lmu4VgUALNfpr0bBsgNXlbEuhCDiO3pZ-0m-WAtOY Message-ID: Subject: Re: BUG #19474: LIKE with nondeterministic collations mis-handle literal backslashes in patterns containing escape To: zxwsbg12138@gmail.com, pgsql-bugs@lists.postgresql.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Hi, I have proposed a fix for this on pgsql-hackers[1]. Please take a look and let me know what you think. Thanks & Regards, Nitin Motiani Google [1] https://www.postgresql.org/message-id/CAH5HC94yU%2BK8Gcdy12M5BS8gwD_SXL= SHzc9k5tNk7JDnpBiFMA%40mail.gmail.com On Sat, May 9, 2026 at 8:02=E2=80=AFAM PG Bug reporting form wrote: > > The following bug has been logged on the website: > > Bug reference: 19474 > Logged by: Bowen Shi > Email address: zxwsbg12138@gmail.com > PostgreSQL version: 18.3 > Operating system: centos > Description: > > After commit 85b7efa1cdd63c2fe2b70b725b8285743ee5787f ("Support LIKE with > nondeterministic collations"), LIKE on a nondeterministic collation can > return an incorrect result when the pattern contains a literal backslash. > > The problem appears to be in MatchText() in > src/backend/utils/adt/like_match.c. In the nondeterministic-collation pat= h, > when a pattern substring contains escape processing, the code builds an > unescaped copy of the substring. In that logic, a backslash that should > remain as a literal character can be dropped, so the substring compared b= y > pg_strncoll() is not the same as the original SQL pattern semantics. > > As a result, a LIKE pattern that should match a string containing a liter= al > backslash can incorrectly return false. > > SQL reproduction: > > CREATE COLLATION ignore_accents ( > provider =3D icu, > locale =3D 'und-u-ks-level1', > deterministic =3D false > ); > > SELECT 'back\slash' COLLATE ignore_accents LIKE 'back\slash%' ESCAPE '#'; > > Expected result: > t > > Actual result: > f > > The same pattern works as expected without the nondeterministic collation > semantics. > > A table-based reproduction: > > CREATE COLLATION ignore_accents ( > provider =3D icu, > locale =3D 'und-u-ks-level1', > deterministic =3D false > ); > > CREATE TABLE like_test (val text); > INSERT INTO like_test VALUES ('back\slash'); > > SELECT val > FROM like_test > WHERE val COLLATE ignore_accents LIKE 'back\slash%' ESCAPE '#'; > > Expected result: > one row: back\slash > > Actual result: > zero rows > > This seems to be caused by the unescape logic in like_match.c for > nondeterministic collations, where a pattern fragment containing backslas= hes > is copied incorrectly before calling pg_strncoll(). > > > >