From fcfb081954801183f4c67cfe447c73f22b2dbf9b 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] Fix memory leak in pg_config

---
 src/bin/pg_config/pg_config.c | 15 ++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/bin/pg_config/pg_config.c b/src/bin/pg_config/pg_config.c
index 28db024263..af99ae8657 100644
--- a/src/bin/pg_config/pg_config.c
+++ b/src/bin/pg_config/pg_config.c
@@ -125,6 +125,17 @@ show_item(const char *configname,
 	}
 }
 
+static
+void pfree_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)
 {
@@ -160,6 +171,7 @@ main(int argc, char **argv)
 	{
 		for (i = 0; i < configdata_len; i++)
 			printf("%s = %s\n", configdata[i].name, configdata[i].setting);
+		pfree_configdata(configdata, configdata_len);
 		exit(0);
 	}
 
@@ -180,9 +192,12 @@ main(int argc, char **argv)
 			fprintf(stderr, _("%s: invalid argument: %s\n"),
 					progname, argv[i]);
 			advice();
+			pfree_configdata(configdata, configdata_len);
 			exit(1);
 		}
 	}
 
+	pfree_configdata(configdata, configdata_len);
+
 	return 0;
 }
-- 
2.39.2

