diff --git a/src/backend/distributed/master/master_delete_protocol.c b/src/backend/distributed/master/master_delete_protocol.c index 399936bb9..292c7cf55 100644 --- a/src/backend/distributed/master/master_delete_protocol.c +++ b/src/backend/distributed/master/master_delete_protocol.c @@ -317,7 +317,7 @@ DropShards(Oid relationId, char *schemaName, char *relationName, ShardInterval *shardInterval = (ShardInterval *) lfirst(shardIntervalCell); uint64 shardId = shardInterval->shardId; char *quotedShardName = NULL; - char *shardRelationName = pnstrdup(relationName, NAMEDATALEN); + char *shardRelationName = pstrdup(relationName); Assert(shardInterval->relationId == relationId); diff --git a/src/backend/distributed/master/master_expire_table_cache.c b/src/backend/distributed/master/master_expire_table_cache.c index f0d3f3e53..357fb6f85 100644 --- a/src/backend/distributed/master/master_expire_table_cache.c +++ b/src/backend/distributed/master/master_expire_table_cache.c @@ -169,7 +169,7 @@ DropShardsFromWorker(WorkerNode *workerNode, Oid relationId, List *shardInterval foreach(shardIntervalCell, shardIntervalList) { ShardInterval *shardInterval = (ShardInterval *) lfirst(shardIntervalCell); - char *shardName = pnstrdup(relationName, NAMEDATALEN); + char *shardName = pstrdup(relationName); char *quotedShardName = NULL; AppendShardIdToName(&shardName, shardInterval->shardId); diff --git a/src/backend/distributed/relay/relay_event_utility.c b/src/backend/distributed/relay/relay_event_utility.c index 3a7f57daf..6404df7f8 100644 --- a/src/backend/distributed/relay/relay_event_utility.c +++ b/src/backend/distributed/relay/relay_event_utility.c @@ -483,7 +483,7 @@ TypeDropIndexConstraint(const AlterTableCmd *command, return false; } - searchedConstraintName = pnstrdup(command->name, NAMEDATALEN); + searchedConstraintName = pstrdup(command->name); AppendShardIdToName(&searchedConstraintName, shardId); pgConstraint = heap_open(ConstraintRelationId, AccessShareLock); @@ -637,6 +637,13 @@ AppendShardIdToName(char **name, uint64 shardId) uint32 longNameHash = 0; int multiByteClipLength = 0; + if (nameLength >= NAMEDATALEN) + { + ereport(ERROR, (errcode(ERRCODE_NAME_TOO_LONG), + errmsg("identifier must be less than %d characters", + NAMEDATALEN))); + } + snprintf(shardIdAndSeparator, NAMEDATALEN, "%c" UINT64_FORMAT, SHARD_NAME_SEPARATOR, shardId); shardIdAndSeparatorLength = strlen(shardIdAndSeparator);