0001-amcheck-avoid-using-VARSIZE-for-VARATT_IS_SHORT.patch

application/octet-stream

Filename: 0001-amcheck-avoid-using-VARSIZE-for-VARATT_IS_SHORT.patch
Type: application/octet-stream
Part: 0
Message: Re: [BUG] false positive in bt_index_check in case of short 4B varlena datum

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch 0001
Subject: amcheck: avoid using VARSIZE() for VARATT_IS_SHORT()
File+
contrib/amcheck/verify_nbtree.c 1 1
src/include/varatt.h 1 0
From 276482c76491b1aa18a729dd637342b374dcd7fa Mon Sep 17 00:00:00 2001
From: Andrey Borodin <amborodin@acm.org>
Date: Sun, 3 May 2026 23:13:59 +0500
Subject: [PATCH] amcheck: avoid using VARSIZE() for VARATT_IS_SHORT()

---
 contrib/amcheck/verify_nbtree.c | 2 +-
 src/include/varatt.h            | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/contrib/amcheck/verify_nbtree.c b/contrib/amcheck/verify_nbtree.c
index b74ab5f7a05..a3394d88a4e 100644
--- a/contrib/amcheck/verify_nbtree.c
+++ b/contrib/amcheck/verify_nbtree.c
@@ -2888,7 +2888,7 @@ bt_normalize_tuple(BtreeCheckState *state, IndexTuple itup)
 							ItemPointerGetBlockNumber(&(itup->t_tid)),
 							ItemPointerGetOffsetNumber(&(itup->t_tid)),
 							RelationGetRelationName(state->rel))));
-		else if (!VARATT_IS_COMPRESSED(DatumGetPointer(normalized[i])) &&
+		else if (!VARATT_IS_EXTENDED(DatumGetPointer(normalized[i])) &&
 				 VARSIZE(DatumGetPointer(normalized[i])) > TOAST_INDEX_TARGET &&
 				 (att->attstorage == TYPSTORAGE_EXTENDED ||
 				  att->attstorage == TYPSTORAGE_MAIN))
diff --git a/src/include/varatt.h b/src/include/varatt.h
index 000bdf33b92..321342cab67 100644
--- a/src/include/varatt.h
+++ b/src/include/varatt.h
@@ -297,6 +297,7 @@ typedef struct
 static inline Size
 VARSIZE(const void *PTR)
 {
+	Assert(VARATT_IS_4B(PTR));
 	return VARSIZE_4B(PTR);
 }
 
-- 
2.50.1 (Apple Git-155)