mirror of
https://github.com/postgres/postgres.git
synced 2025-09-06 13:46:51 +03:00
Improve CREATE SUBSCRIPTION option parsing
When creating a subscription with slot_name = NONE, we failed to check that also create_slot = false and enabled = false were set. This created an invalid subscription and could later lead to a crash if a NULL slot name was accessed. Add more checks around that for robustness. Reported-by: tushar <tushar.ahuja@enterprisedb.com>
This commit is contained in:
@@ -168,7 +168,9 @@ parse_subscription_options(List *options, bool *connect, bool *enabled_given,
|
||||
false, 0, false);
|
||||
}
|
||||
else
|
||||
elog(ERROR, "unrecognized option: %s", defel->defname);
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("unrecognized subscription parameter: %s", defel->defname)));
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -214,6 +216,16 @@ parse_subscription_options(List *options, bool *connect, bool *enabled_given,
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("slot_name = NONE and create_slot = true are mutually exclusive options")));
|
||||
|
||||
if (enabled && !*enabled_given && *enabled)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("subscription with slot_name = NONE must also set enabled = false")));
|
||||
|
||||
if (create_slot && !create_slot_given && *create_slot)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_SYNTAX_ERROR),
|
||||
errmsg("subscription with slot_name = NONE must also set create_slot = false")));
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user