From 58cbbf1812022ead2bdab4a313b230624f97e7b0 Mon Sep 17 00:00:00 2001
From: Jianghua Yang <yjhjstz@gmail.com>
Date: Wed, 2 Jul 2025 06:48:48 -0700
Subject: [PATCH] initdb: Reject empty string for -U/--username option v3

Previously, passing an empty string to the -U or --username option
(e.g., `initdb -U ''`) would cause confusing errors during bootstrap,
as initdb attempted to create a role with an empty name.

This patch adds an explicit check for empty usernames and exits
immediately with a clear error message.

A test case is added to verify that initdb fails when -U is given an
empty string.
---
 src/bin/initdb/initdb.c        | 2 ++
 src/bin/initdb/t/001_initdb.pl | 7 +++++++
 2 files changed, 9 insertions(+)

diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c
index 62bbd08d9f6..ad5675fd120 100644
--- a/src/bin/initdb/initdb.c
+++ b/src/bin/initdb/initdb.c
@@ -3291,6 +3291,8 @@ main(int argc, char *argv[])
 				pwprompt = true;
 				break;
 			case 'U':
+				if (optarg[0] == '\0')
+					pg_fatal("superuser name must not be empty.");
 				username = pg_strdup(optarg);
 				break;
 			case 'd':
diff --git a/src/bin/initdb/t/001_initdb.pl b/src/bin/initdb/t/001_initdb.pl
index b7ef7ed8d06..0109925af85 100644
--- a/src/bin/initdb/t/001_initdb.pl
+++ b/src/bin/initdb/t/001_initdb.pl
@@ -37,6 +37,13 @@ command_fails(
 command_fails([ 'initdb', '--username' => 'pg_test', $datadir ],
 	'role names cannot begin with "pg_"');
 
+command_fails_like(
+	[ 'initdb', '--username' => '', $datadir ],
+	qr/superuser name must not be empty./,
+	'empty username not allowed');
+
+
+
 mkdir $datadir;
 
 # make sure we run one successful test without a TZ setting so we test
-- 
2.39.5 (Apple Git-154)

