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 1waCvh-001beZ-0H for pgsql-bugs@arkaria.postgresql.org; Thu, 18 Jun 2026 13:37:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1waCvf-00Ba7l-2i for pgsql-bugs@arkaria.postgresql.org; Thu, 18 Jun 2026 13:37:11 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1waCvf-00Ba7d-1V for pgsql-bugs@lists.postgresql.org; Thu, 18 Jun 2026 13:37:11 +0000 Received: from mail-lf1-x136.google.com ([2a00:1450:4864:20::136]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1waCve-00000000yfS-04Nn for pgsql-bugs@lists.postgresql.org; Thu, 18 Jun 2026 13:37:10 +0000 Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-5aa5ce4904eso1057353e87.3 for ; Thu, 18 Jun 2026 06:37:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781789826; cv=none; d=google.com; s=arc-20240605; b=AAAQeM2zC/rP1Kn8DHOzEhMCXk1usjaHhEjlWPKYRHB5bC2kOiXRMpVA1qR9LgB3Qf idlDaDtjrQir4MJXf54zyRs4i9rqovwELauJ8D/tKIP5NL0AsXARO6S1CrrJXyhnYeYS a7CRl5Glr9unUgaYcVusCwFsJ7ryuLOCFd+ltZLNIIrbEZFADvbOaDM9+NSHiGrf6gFv tk6r61U+QeiKppRYYWW/85Y+mlCXB9vjeuCEURo+PpLL+d9IQBsdfpHc25lvPHW6/ONy KfrASne8EW8wJHCg8vFE7D3ULP99qWilq2J7/8Q5SUxSYOuKI8bOpE27D/XO7F1o8Tth kKJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=rHsVE0pTXpDfIuIexGc5vwDvqvCiWQKM4d1uwGonz9o=; fh=ZcTTX2qDgtjZInErWsCIV36FwIv4BXJ/WCj+Gn8cy+8=; b=aaESrFPYDMQliZs4WxxbXlTHbQPOj0wisdSUfozsi4ce5oC6PVBIZJGCaQl6ipFhhG Db6KOtFthwJnos586DsH3dseBMAjAqrZvaQeLz3gAq1e+R/+kuh6N+227qKjHtapEFiD 6bCGo/TaCiX1k/rl8pkA6uzC/6/neUNhlBqsp0zjYKvKekBtV8MyB5pQHgOpoMq/y1GX yS2tFMvd6nAeM+3qA//9q3fLzY41nIGtZarzbsJTygTfJPYa2yyV76ybWHiofdWZ2bzc FZF8gNGjKCxvZzxxE8DgrnLj2rn3kYMKckvshY/uogyiogDRC/5/sWULkBVvBbv6oRwO HJCw==; 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=gmail.com; s=20251104; t=1781789826; x=1782394626; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=rHsVE0pTXpDfIuIexGc5vwDvqvCiWQKM4d1uwGonz9o=; b=dDXVy7kFsH1VUJjSxuoUKTJ99u76dhSNmYamwrdwsbO284AMlBPleyQ6i/L36zcXt0 /FMw5tBRRTaKcwR+gdQzLNx37E5vRJ2eYf5Iibeszwv0mn+Z9g8yJ9LThnpRxtzm41n3 6G4Fsu7wVufGPW4Ug3vNANnUPxxVptwdtzX0PciZ/n07PWalEzvWWti3F4/9Do5Js7eC S+8dpImw7x5ierdAetjP4L64lmrGbwCiR1d2PSkIt7VWMxsi3d2FPRjVZdREqlgTSb/b xoWLGtq43ceoLPp3/5H2B+mtljytC2sh4c3oJeWkrUz2pKU5ngQxq9ZNHAEK0+pD3+YW h5eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781789826; x=1782394626; h=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=rHsVE0pTXpDfIuIexGc5vwDvqvCiWQKM4d1uwGonz9o=; b=lQmVBFIwiudLNn0GQUk7FrBj2PW0Ma/+D6lWWq09wINraHDn5ZsxoNI4JsP7B5/6cD ulpHPr2jI6T5P1xT7H3SoEMKPBNUnEhf4HDJq6JUejEl5xGvC1ER72X5+As5YsdyqBsY T0Hzve7v7Kvxn2VOFBDsA45E3VsrJ3G+u/Rk69m7GVDoegjRrVhRJ/MP4QYgbzUykMTj xEoVGSGactY4t+s6bFMpY1Rq5noGjeI4mUZP2jGLBLqd2zsYajG42XuC+PKSvRnjIe5i Uvudp8nWYscIXy2UVivfS+KunCzXKN0RUuaRBHkoNGe1J9dyvMgEfPp94Tv2jfG0saWI KaCQ== X-Forwarded-Encrypted: i=1; AFNElJ/L5wm1AUWYddI+qP0rkGwz/bw/dhcNk/KMkuW62FdyA3bmF5P9PGEWDFa0/JpUC6cOWpCLsfoIEX9g@lists.postgresql.org X-Gm-Message-State: AOJu0YyWlNCbb39eDxLM5HWq2jAG46hoCHaa1Qn6cmkD0qp+h2dZj4Ao EVDlCe4ql93Z0lfNf5LyNgAYD8CAIluf+qhbbpHAHqiAMb5ExPmeSdRwLQB9kb0nJVbFBVDo8qw OmEWdM/Pyxn8/kctOYoe7cJ95CT1xA8Y= X-Gm-Gg: AfdE7cnBr3vw3JcxEgvscnE+FMV9AWAo6rYFjhPrGAGGga3hm6PiPchumDEvRgOd1hx +S/QzDXhUjaWAq3Pbfv1E5YSetOlM1mw+5ZRoMmAdfhJQ1lQFw33/0OdDhYUiouENrxnyB3zrC4 sH99Mf6KU0ksMDY+Z6S0JzrIMlCrKL7U98SLZs0PTjCP1H54/8G04oSjr3zAbAeS7A5DpsbeUNR M13FxPAsEZCtvPnXDHOKyKsB+VpLn0I4oJLpCf4hAn8QiIh1wJ/HIYXd1NOxg1DBCtZruRR X-Received: by 2002:a05:6512:3a82:b0:5aa:8823:e311 with SMTP id 2adb3069b0e04-5ad47018fd3mr2594039e87.47.1781789825947; Thu, 18 Jun 2026 06:37:05 -0700 (PDT) MIME-Version: 1.0 References: <19524-9559d302c8455664@postgresql.org> In-Reply-To: <19524-9559d302c8455664@postgresql.org> From: Ayush Tiwari Date: Thu, 18 Jun 2026 19:06:52 +0530 X-Gm-Features: AVVi8CdBy3C4EfYlXaRvmtFHfM_MCha38PNJ2Uo06-N5g1sL-5gi0__eRFNEWiw Message-ID: Subject: Re: BUG #19524: In `contrib/btree_gist` float4/float8 GiST index operations, handling NaN values with raw C operator To: 3020001251@tju.edu.cn, pgsql-bugs@lists.postgresql.org Content-Type: multipart/alternative; boundary="000000000000a3df18065487454c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a3df18065487454c Content-Type: text/plain; charset="UTF-8" Hi, On Thu, 18 Jun 2026 at 18:54, PG Bug reporting form wrote: > The following bug has been logged on the website: > > Bug reference: 19524 > Logged by: Yuelin Wang > Email address: 3020001251@tju.edu.cn > PostgreSQL version: 19beta1 > Operating system: Linux (Ubuntu 24.04, x86_64) > Description: > > **Component**: `contrib/btree_gist/btree_float4.c`, `btree_float8.c`, > `btree_utils_num.c` > > ```sql > CREATE EXTENSION btree_gist; > > -- Effect 1: EXCLUDE constraint bypass (float4) > CREATE TABLE reservations ( > room float4, > during tsrange, > EXCLUDE USING gist (room WITH =, during WITH &&) > ); > INSERT INTO reservations VALUES ('NaN'::float4, '[2025-01-01,2025-01-02)'); > INSERT INTO reservations VALUES ('NaN'::float4, '[2025-01-01,2025-01-02)'); > SELECT COUNT(*) FROM reservations; > > -- Effect 2: RLS bypass (float8) > CREATE TABLE measurements (id int, val float8); > CREATE INDEX ON measurements USING gist (val); > INSERT INTO measurements VALUES (1, 'NaN'), (2, 1.5); > ALTER TABLE measurements ENABLE ROW LEVEL SECURITY; > ALTER TABLE measurements FORCE ROW LEVEL SECURITY; > CREATE POLICY hide_nan ON measurements FOR SELECT USING (val != > 'NaN'::float8); > CREATE ROLE lowpriv LOGIN; > GRANT SELECT ON measurements TO lowpriv; > SET ROLE lowpriv; > SET enable_seqscan = off; > SET enable_bitmapscan = off; > SELECT * FROM measurements ORDER BY id; > RESET ROLE; > > -- Effect 3: index corruption after page split (float8) > CREATE TABLE t (val float8); > CREATE INDEX ON t USING gist (val); > INSERT INTO t SELECT 'NaN'::float8 FROM generate_series(1, 2000); > SET enable_indexscan = off; SET enable_bitmapscan = off; > SELECT COUNT(*) AS seqscan_count FROM t WHERE val = 'NaN'; > RESET ALL; > SET enable_seqscan = off; SET enable_bitmapscan = off; > SELECT COUNT(*) AS indexscan_count FROM t WHERE val = 'NaN'; > RESET ALL; > ``` > > Expected vs actual output: > > | Query | Expected | Actual | > |---|---|---| > | `SELECT COUNT(*) FROM reservations` | `1` (second insert blocked by > EXCLUDE) | `2` | > | `SELECT * FROM measurements ORDER BY id` (lowpriv, index scan) | `(2, > 1.5)` only | `(1, NaN)` and `(2, 1.5)` | > | `seqscan_count` (Effect 3, seq scan forced) | `2000` | `2000` | > | `indexscan_count` (Effect 3, index scan forced) | `2000` | `0` | > > This looks the same as: https://www.postgresql.org/message-id/19501-3bff3bbc97f1e7c9%40postgresql.org Could you please check. Regards, Ayush --000000000000a3df18065487454c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Thu, 18 Jun 2= 026 at 18:54, PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the websi= te:

Bug reference:=C2=A0 =C2=A0 =C2=A0 19524
Logged by:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Yuelin Wang
Email address:=C2=A0 =C2=A0 =C2=A0 3020001251@tju.edu.cn
PostgreSQL version: 19beta1
Operating system:=C2=A0 =C2=A0Linux (Ubuntu 24.04, x86_64)
Description:=C2=A0 =C2=A0 =C2=A0 =C2=A0

**Component**: `contrib/btree_gist/btree_float4.c`, `btree_float8.c`,
`btree_utils_num.c`

```sql
CREATE EXTENSION btree_gist;

-- Effect 1: EXCLUDE constraint bypass (float4)
CREATE TABLE reservations (
=C2=A0 =C2=A0 room=C2=A0 =C2=A0float4,
=C2=A0 =C2=A0 during tsrange,
=C2=A0 =C2=A0 EXCLUDE USING gist (room WITH =3D, during WITH &&) );
INSERT INTO reservations VALUES ('NaN'::float4, '[2025-01-01,20= 25-01-02)');
INSERT INTO reservations VALUES ('NaN'::float4, '[2025-01-01,20= 25-01-02)');
SELECT COUNT(*) FROM reservations;

-- Effect 2: RLS bypass (float8)
CREATE TABLE measurements (id int, val float8);
CREATE INDEX ON measurements USING gist (val);
INSERT INTO measurements VALUES (1, 'NaN'), (2, 1.5);
ALTER TABLE measurements ENABLE ROW LEVEL SECURITY;
ALTER TABLE measurements FORCE ROW LEVEL SECURITY;
CREATE POLICY hide_nan ON measurements FOR SELECT USING (val !=3D
'NaN'::float8);
CREATE ROLE lowpriv LOGIN;
GRANT SELECT ON measurements TO lowpriv;
SET ROLE lowpriv;
SET enable_seqscan =3D off;
SET enable_bitmapscan =3D off;
SELECT * FROM measurements ORDER BY id;
RESET ROLE;

-- Effect 3: index corruption after page split (float8)
CREATE TABLE t (val float8);
CREATE INDEX ON t USING gist (val);
INSERT INTO t SELECT 'NaN'::float8 FROM generate_series(1, 2000); SET enable_indexscan =3D off; SET enable_bitmapscan =3D off;
SELECT COUNT(*) AS seqscan_count FROM t WHERE val =3D 'NaN';
RESET ALL;
SET enable_seqscan =3D off; SET enable_bitmapscan =3D off;
SELECT COUNT(*) AS indexscan_count FROM t WHERE val =3D 'NaN';
RESET ALL;
```

Expected vs actual output:

| Query | Expected | Actual |
|---|---|---|
| `SELECT COUNT(*) FROM reservations` | `1` (second insert blocked by
EXCLUDE) | `2` |
| `SELECT * FROM measurements ORDER BY id` (lowpriv, index scan) | `(2,
1.5)` only | `(1, NaN)` and `(2, 1.5)` |
| `seqscan_count` (Effect 3, seq scan forced) | `2000` | `2000` |
| `indexscan_count` (Effect 3, index scan forced) | `2000` | `0` |

<= /blockquote>

This looks the same as:=C2=A0https://ww= w.postgresql.org/message-id/19501-3bff3bbc97f1e7c9%40postgresql.org
= Could you please check.

Regards,
Ayush=C2=A0
--000000000000a3df18065487454c--