mirror of https://github.com/citusdata/citus.git
Fix a NULL dereference.
parent
3359a7e6f0
commit
47aa95d00d
|
@ -1526,6 +1526,13 @@ TupleToWorkerNode(TupleDesc tupleDescriptor, HeapTuple heapTuple)
|
||||||
|
|
||||||
Assert(!HeapTupleHasNulls(heapTuple));
|
Assert(!HeapTupleHasNulls(heapTuple));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function can be called before "ALTER TABLE ... ADD COLUMN nodecluster ...",
|
||||||
|
* therefore heap_deform_tuple() won't set the isNullArray for this column. We
|
||||||
|
* initialize it true to be safe in that case.
|
||||||
|
*/
|
||||||
|
memset(isNullArray, true, sizeof(isNullArray));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We use heap_deform_tuple() instead of heap_getattr() to expand tuple
|
* We use heap_deform_tuple() instead of heap_getattr() to expand tuple
|
||||||
* to contain missing values when ALTER TABLE ADD COLUMN happens.
|
* to contain missing values when ALTER TABLE ADD COLUMN happens.
|
||||||
|
@ -1545,21 +1552,17 @@ TupleToWorkerNode(TupleDesc tupleDescriptor, HeapTuple heapTuple)
|
||||||
workerNode->isActive = DatumGetBool(datumArray[Anum_pg_dist_node_isactive - 1]);
|
workerNode->isActive = DatumGetBool(datumArray[Anum_pg_dist_node_isactive - 1]);
|
||||||
workerNode->nodeRole = DatumGetObjectId(datumArray[Anum_pg_dist_node_noderole - 1]);
|
workerNode->nodeRole = DatumGetObjectId(datumArray[Anum_pg_dist_node_noderole - 1]);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* nodecluster column can be missing. In the case of extension creation/upgrade,
|
||||||
|
* master_initialize_node_metadata function is called before the nodecluster
|
||||||
|
* column is added to pg_dist_node table.
|
||||||
|
*/
|
||||||
|
if (!isNullArray[Anum_pg_dist_node_nodecluster - 1])
|
||||||
{
|
{
|
||||||
Name nodeClusterName = DatumGetName(datumArray[Anum_pg_dist_node_nodecluster -
|
Name nodeClusterName =
|
||||||
1]);
|
DatumGetName(datumArray[Anum_pg_dist_node_nodecluster - 1]);
|
||||||
char *nodeClusterString = NameStr(*nodeClusterName);
|
char *nodeClusterString = NameStr(*nodeClusterName);
|
||||||
|
strlcpy(workerNode->nodeCluster, nodeClusterString, NAMEDATALEN);
|
||||||
/*
|
|
||||||
* nodeClusterString can be null if nodecluster column is not present.
|
|
||||||
* In the case of extension creation/upgrade, master_initialize_node_metadata
|
|
||||||
* function is called before the nodecluster column is added to pg_dist_node
|
|
||||||
* table.
|
|
||||||
*/
|
|
||||||
if (nodeClusterString != NULL)
|
|
||||||
{
|
|
||||||
strlcpy(workerNode->nodeCluster, nodeClusterString, NAMEDATALEN);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return workerNode;
|
return workerNode;
|
||||||
|
|
Loading…
Reference in New Issue