Merge pull request #837 from citusdata/bugfix/pnstrdup

Avoid use of pnstrdup
pull/838/head
Marco Slot 2016-10-04 07:09:15 +02:00 committed by GitHub
commit 09e3d5fd47
3 changed files with 10 additions and 3 deletions

View File

@ -317,7 +317,7 @@ DropShards(Oid relationId, char *schemaName, char *relationName,
ShardInterval *shardInterval = (ShardInterval *) lfirst(shardIntervalCell); ShardInterval *shardInterval = (ShardInterval *) lfirst(shardIntervalCell);
uint64 shardId = shardInterval->shardId; uint64 shardId = shardInterval->shardId;
char *quotedShardName = NULL; char *quotedShardName = NULL;
char *shardRelationName = pnstrdup(relationName, NAMEDATALEN); char *shardRelationName = pstrdup(relationName);
Assert(shardInterval->relationId == relationId); Assert(shardInterval->relationId == relationId);

View File

@ -169,7 +169,7 @@ DropShardsFromWorker(WorkerNode *workerNode, Oid relationId, List *shardInterval
foreach(shardIntervalCell, shardIntervalList) foreach(shardIntervalCell, shardIntervalList)
{ {
ShardInterval *shardInterval = (ShardInterval *) lfirst(shardIntervalCell); ShardInterval *shardInterval = (ShardInterval *) lfirst(shardIntervalCell);
char *shardName = pnstrdup(relationName, NAMEDATALEN); char *shardName = pstrdup(relationName);
char *quotedShardName = NULL; char *quotedShardName = NULL;
AppendShardIdToName(&shardName, shardInterval->shardId); AppendShardIdToName(&shardName, shardInterval->shardId);

View File

@ -483,7 +483,7 @@ TypeDropIndexConstraint(const AlterTableCmd *command,
return false; return false;
} }
searchedConstraintName = pnstrdup(command->name, NAMEDATALEN); searchedConstraintName = pstrdup(command->name);
AppendShardIdToName(&searchedConstraintName, shardId); AppendShardIdToName(&searchedConstraintName, shardId);
pgConstraint = heap_open(ConstraintRelationId, AccessShareLock); pgConstraint = heap_open(ConstraintRelationId, AccessShareLock);
@ -637,6 +637,13 @@ AppendShardIdToName(char **name, uint64 shardId)
uint32 longNameHash = 0; uint32 longNameHash = 0;
int multiByteClipLength = 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, snprintf(shardIdAndSeparator, NAMEDATALEN, "%c" UINT64_FORMAT,
SHARD_NAME_SEPARATOR, shardId); SHARD_NAME_SEPARATOR, shardId);
shardIdAndSeparatorLength = strlen(shardIdAndSeparator); shardIdAndSeparatorLength = strlen(shardIdAndSeparator);