From c36b636096a1aac4fd5d7c8c5d11ed2bb6349d0f Mon Sep 17 00:00:00 2001 From: Noah Misch Date: Sat, 12 Aug 2023 14:37:05 -0700 Subject: [PATCH] Fix off-by-one in XLogRecordMaxSize check. pg_logical_emit_message(false, '_', repeat('x', 1069547465)) failed with self-contradictory message "WAL record would be 1069547520 bytes (of maximum 1069547520 bytes)". There's no particular benefit from allowing or denying one byte in either direction; XLogRecordMaxSize could rise a few megabytes without trouble. Hence, this is just for cleanliness. Back-patch to v16, where this check first appeared. --- src/backend/access/transam/xloginsert.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index 54247e1d81..258cbd7035 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -900,7 +900,7 @@ XLogRecordAssemble(RmgrId rmid, uint8 info, * not emit records larger than the sizes advertised to be supported. This * cap is based on DecodeXLogRecordRequiredSpace(). */ - if (total_len >= XLogRecordMaxSize) + if (total_len > XLogRecordMaxSize) ereport(ERROR, (errmsg_internal("oversized WAL record"), errdetail_internal("WAL record would be %llu bytes (of maximum %u bytes); rmid %u flags %u.",