From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Ivan Kush <ivan.kush@tantorlabs.ru>
Date: Tue, 21 Jul 2026 15:25:38 +0000
Subject: [PATCH v2] Fix memory leak in pg_config

---
 src/bin/pg_config/pg_config.c | 48 ++++++++++++++++++++++++++++++++----------------
 1 file changed, 32 insertions(+), 16 deletions(-)

diff --git a/src/bin/pg_config/pg_config.c b/src/bin/pg_config/pg_config.c
--- a/src/bin/pg_config/pg_config.c
+++ b/src/bin/pg_config/pg_config.c
@@ -11,6 +11,17 @@
 	}
 }
 
+static void
+free_configdata(ConfigData *configdata, size_t configdata_len)
+{
+	for (size_t i = 0; i < configdata_len; i++)
+	{
+		pfree(configdata[i].name);
+		pfree(configdata[i].setting);
+	}
+	pfree(configdata);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -19,6 +30,7 @@
 	char		my_exec_path[MAXPGPATH];
 	int			i;
 	int			j;
+	int			exit_code = 0;
 
 	set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pg_config"));
 
@@ -49,29 +61,33 @@
 	{
 		for (i = 0; i < configdata_len; i++)
 			printf("%s = %s\n", configdata[i].name, configdata[i].setting);
-		exit(0);
 	}
-
-	/* otherwise print requested items */
-	for (i = 1; i < argc; i++)
+	else
 	{
-		for (j = 0; info_items[j].switchname != NULL; j++)
+		/* otherwise print requested items */
+		for (i = 1; i < argc; i++)
 		{
-			if (strcmp(argv[i], info_items[j].switchname) == 0)
+			for (j = 0; info_items[j].switchname != NULL; j++)
+			{
+				if (strcmp(argv[i], info_items[j].switchname) == 0)
+				{
+					show_item(info_items[j].configname,
+							  configdata, configdata_len);
+					break;
+				}
+			}
+			if (info_items[j].switchname == NULL)
 			{
-				show_item(info_items[j].configname,
-						  configdata, configdata_len);
+				fprintf(stderr, _("%s: invalid argument: %s\n"),
+						progname, argv[i]);
+				advice();
+				exit_code = 1;
 				break;
 			}
 		}
-		if (info_items[j].switchname == NULL)
-		{
-			fprintf(stderr, _("%s: invalid argument: %s\n"),
-					progname, argv[i]);
-			advice();
-			exit(1);
-		}
 	}
 
-	return 0;
+	free_configdata(configdata, configdata_len);
+
+	return exit_code;
 }
-- 
2.39.2
