From 3d00537feb565c410baf41bb301eee338e4b2317 Mon Sep 17 00:00:00 2001 From: Jeff Davis Date: Sat, 15 Aug 2026 09:42:23 -0700 Subject: [PATCH] Clarify logic in CreateSubscription(). No bug found in previous code, but it unnecessarily relied on grammar rules. Per complaint from Coverity. Reported-by: Tom Lane Discussion: https://postgr.es/m/1787286.1786328153@sss.pgh.pa.us Backpatch-through: 19 --- src/backend/commands/subscriptioncmds.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/subscriptioncmds.c b/src/backend/commands/subscriptioncmds.c index 8e8db08bd93..9938f4b7fe3 100644 --- a/src/backend/commands/subscriptioncmds.c +++ b/src/backend/commands/subscriptioncmds.c @@ -871,11 +871,17 @@ CreateSubscription(ParseState *pstate, CreateSubscriptionStmt *stmt, values[Anum_pg_subscription_subretentionactive - 1] = BoolGetDatum(opts.retaindeadtuples); values[Anum_pg_subscription_subserver - 1] = ObjectIdGetDatum(serverid); - if (!OidIsValid(serverid)) + if (stmt->conninfo) + { + Assert(stmt->conninfo == conninfo && !OidIsValid(serverid)); values[Anum_pg_subscription_subconninfo - 1] = - CStringGetTextDatum(conninfo); + CStringGetTextDatum(stmt->conninfo); + } else + { + Assert(OidIsValid(serverid)); nulls[Anum_pg_subscription_subconninfo - 1] = true; + } if (opts.slot_name) values[Anum_pg_subscription_subslotname - 1] = DirectFunctionCall1(namein, CStringGetDatum(opts.slot_name));