pgsql: pg_surgery: Fix infinite loop on large TID arrays - Mailing list pgsql-committers

From Álvaro Herrera
Subject pgsql: pg_surgery: Fix infinite loop on large TID arrays
Date
Msg-id E1wrBkH-000000009Cx-3hNY@gemulon.postgresql.org
Whole thread
List pgsql-committers
pg_surgery: Fix infinite loop on large TID arrays

heap_force_common() tracked the current position in the caller-supplied
tid[] using OffsetNumber, which is only 16 bits wide, so when the array
held more than 65535 entries, the updated index wrapped around and the
outer loop never reached the exit condition.  A SQL call with a
sufficiently large TID array would then run until interrupted.

Fix by tracking the tid[] position using int instead of OffsetNumber.
A regress case based on the report is included.

Author: Andrey Rachitskiy <pl0h0yp1@gmail.com>
Reviewed-by: Andrey Borodin <x4mmm@yandex-team.ru>
Reported-by: Yuelin Wang <1217816127@qq.com>
Backpatch-through: 14
Bug: #19607
Discussion: https://postgr.es/m/19607-2f256a66481c514b@postgresql.org

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/e9d53cf459419cc7fd32dc85c59ee08ee5bbf1f4

Modified Files
--------------
contrib/pg_surgery/expected/heap_surgery.out | 17 +++++++++++++++++
contrib/pg_surgery/heap_surgery.c            |  6 +++---
contrib/pg_surgery/sql/heap_surgery.sql      |  8 ++++++++
3 files changed, 28 insertions(+), 3 deletions(-)


Attachment

pgsql-committers by date:

Previous
From: Peter Eisentraut
Date:
Subject: pgsql: doc: Add PROPERTY GRAPH to the access privilege tables
Next
From: Daniel Gustafsson
Date:
Subject: pgsql: Do not reuse rd_smgr in fork loop when enabling data checksums