0001-gen_guc_tables-reject-unrecognized-field-names-in-gu.patch

application/octet-stream

Filename: 0001-gen_guc_tables-reject-unrecognized-field-names-in-gu.patch
Type: application/octet-stream
Part: 0
Message: gen_guc_tables improvements

Patch

Format: format-patch
Series: patch 0001
Subject: gen_guc_tables: reject unrecognized field names in guc_parameters.dat
File+
src/backend/utils/misc/gen_guc_tables.pl 19 0
From 2dea67bdc43b93c8d85979cc4f4a0ed839dad6e5 Mon Sep 17 00:00:00 2001
From: Zsolt Parragi <zsolt.parragi@percona.com>
Date: Sun, 15 Mar 2026 11:21:33 +0000
Subject: [PATCH 1/4] gen_guc_tables: reject unrecognized field names in
 guc_parameters.dat

Previously, a typo in a field name (e.g. "contex" instead of "context")
would be silently ignored, potentially leading to subtle bugs or missing
configuration.  Add a whitelist of all recognized fields and report an
error if any entry contains an unknown key.
---
 src/backend/utils/misc/gen_guc_tables.pl | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/src/backend/utils/misc/gen_guc_tables.pl b/src/backend/utils/misc/gen_guc_tables.pl
index a285c62f98d..ba2e6f001f1 100644
--- a/src/backend/utils/misc/gen_guc_tables.pl
+++ b/src/backend/utils/misc/gen_guc_tables.pl
@@ -53,6 +53,25 @@ sub validate_guc_entry
 		string => [],    # no extra required fields
 	);
 
+	# All fields recognized by the generator.  "line_number" is injected
+	# by Catalog::ParseData and is not a user-facing field.
+	my %valid_fields = map { $_ => 1 } (
+		@required_common,
+		qw(long_desc flags ifdef min max options
+		  check_hook assign_hook show_hook
+		  line_number));
+
+	for my $f (sort keys %$entry)
+	{
+		unless ($valid_fields{$f})
+		{
+			die sprintf(
+				qq{%s:%d: error: entry "%s" has unrecognized field "%s"\n},
+				$input_fname, $entry->{line_number},
+				$entry->{name} // '<unknown>', $f);
+		}
+	}
+
 	for my $f (@required_common)
 	{
 		unless (defined $entry->{$f})
-- 
2.43.0