回合主线slot_name校验规则相关代码变化

This commit is contained in:
xue_meng_en
2022-08-30 11:00:10 +08:00
parent 6049a2290c
commit 642b04a4ff

View File

@ -125,29 +125,31 @@ bool ReplicationSlotValidateName(const char *name, int elevel)
{
const char *cp = NULL;
if (name == NULL) {
if (name == NULL || strlen(name) == 0) {
ereport(elevel, (errcode(ERRCODE_INVALID_NAME), errmsg("replication slot name should not be NULL.")));
return false;
}
if (strlen(name) == 0) {
ereport(elevel, (errcode(ERRCODE_INVALID_NAME), errmsg("replication slot name \"%s\" is too short", name)));
return false;
}
if (strlen(name) >= NAMEDATALEN) {
ereport(elevel, (errcode(ERRCODE_NAME_TOO_LONG), errmsg("replication slot name \"%s\" is too long", name)));
return false;
}
if ((strlen(name) == 1 && name[0] == '.') ||
(strlen(name) == strlen("..") && strncmp(name, "..", strlen("..")) == 0)) {
ereport(elevel, (errcode(ERRCODE_INVALID_NAME),
errmsg("'.' and '..' are not allowed to be slot names independently.")));
}
for (cp = name; *cp; cp++) {
if (!((*cp >= 'a' && *cp <= 'z') || (*cp >= '0' && *cp <= '9') || (*cp == '_') || (*cp == '?') ||
(*cp == '<') || (*cp == '!') || (*cp == '-') || (*cp == '.'))) {
(*cp == '.') || (*cp == '-'))) {
ereport(elevel,
(errcode(ERRCODE_INVALID_NAME),
errmsg("replication slot name \"%s\" contains invalid character", name),
errhint("Replication slot names may only contain lower letters, "
"numbers and the underscore character.")));
"numbers and the 4 following special characters: '_', '?', '.', '-'.\n"
"'.' and '..' are also not allowed to be slot names independently.")));
return false;
}
}