From cc9f9b8b878b4d878b0aa4f04226cb6c2873275e Mon Sep 17 00:00:00 2001
From: Justin Pryzby <pryzbyj@telsasoft.com>
Date: Fri, 14 Jan 2022 19:25:21 -0600
Subject: [PATCH 2/6] Avoid the most useless instances of nulls[0]=false..

Getting rid of more of these is apparently too controvercial, but these are the
cases where 1) nulls is always being set to false; and, 2) values[] is not
being memset, so there's no parallel between the two.
---
 contrib/sslinfo/sslinfo.c                |  5 +-
 src/backend/replication/logical/origin.c | 13 +---
 src/backend/utils/adt/misc.c             |  7 +--
 src/backend/utils/misc/pg_controldata.c  | 80 ++----------------------
 4 files changed, 10 insertions(+), 95 deletions(-)

diff --git a/contrib/sslinfo/sslinfo.c b/contrib/sslinfo/sslinfo.c
index 5fd46b98741..d9edfe1b742 100644
--- a/contrib/sslinfo/sslinfo.c
+++ b/contrib/sslinfo/sslinfo.c
@@ -424,7 +424,7 @@ ssl_extension_info(PG_FUNCTION_ARGS)
 	if (call_cntr < max_calls)
 	{
 		Datum		values[3];
-		bool		nulls[3];
+		bool		nulls[3] = {0};
 		char	   *buf;
 		HeapTuple	tuple;
 		Datum		result;
@@ -453,7 +453,6 @@ ssl_extension_info(PG_FUNCTION_ARGS)
 					 errmsg("unknown OpenSSL extension in certificate at position %d",
 							call_cntr)));
 		values[0] = CStringGetTextDatum(OBJ_nid2sn(nid));
-		nulls[0] = false;
 
 		/* Get the extension value */
 		if (X509V3_EXT_print(membuf, ext, 0, 0) <= 0)
@@ -463,11 +462,9 @@ ssl_extension_info(PG_FUNCTION_ARGS)
 							call_cntr)));
 		len = BIO_get_mem_data(membuf, &buf);
 		values[1] = PointerGetDatum(cstring_to_text_with_len(buf, len));
-		nulls[1] = false;
 
 		/* Get critical status */
 		values[2] = BoolGetDatum(X509_EXTENSION_get_critical(ext));
-		nulls[2] = false;
 
 		/* Build tuple */
 		tuple = heap_form_tuple(fctx->tupdesc, values, nulls);
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index f134e44878f..adb3430c33a 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -1527,10 +1527,9 @@ pg_show_replication_origin_status(PG_FUNCTION_ARGS)
 			continue;
 
 		memset(values, 0, sizeof(values));
-		memset(nulls, 1, sizeof(nulls));
+		memset(nulls, 0, sizeof(nulls));
 
 		values[0] = ObjectIdGetDatum(state->roident);
-		nulls[0] = false;
 
 		/*
 		 * We're not preventing the origin to be dropped concurrently, so
@@ -1538,19 +1537,13 @@ pg_show_replication_origin_status(PG_FUNCTION_ARGS)
 		 */
 		if (replorigin_by_oid(state->roident, true,
 							  &roname))
-		{
 			values[1] = CStringGetTextDatum(roname);
-			nulls[1] = false;
-		}
+		else
+			nulls[1] = true;
 
 		LWLockAcquire(&state->lock, LW_SHARED);
-
 		values[2] = LSNGetDatum(state->remote_lsn);
-		nulls[2] = false;
-
 		values[3] = LSNGetDatum(state->local_lsn);
-		nulls[3] = false;
-
 		LWLockRelease(&state->lock);
 
 		tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc,
diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c
index 9c132512315..611b492624a 100644
--- a/src/backend/utils/adt/misc.c
+++ b/src/backend/utils/adt/misc.c
@@ -246,7 +246,7 @@ pg_tablespace_databases(PG_FUNCTION_ARGS)
 		char	   *subdir;
 		bool		isempty;
 		Datum		values[1];
-		bool		nulls[1];
+		bool		nulls[1] = {0};
 
 		/* this test skips . and .., but is awfully weak */
 		if (!datOid)
@@ -262,7 +262,6 @@ pg_tablespace_databases(PG_FUNCTION_ARGS)
 			continue;			/* indeed, nothing in it */
 
 		values[0] = ObjectIdGetDatum(datOid);
-		nulls[0] = false;
 
 		tuplestore_putvalues(rsinfo->setResult, rsinfo->setDesc,
 							 values, nulls);
@@ -530,11 +529,9 @@ pg_get_catalog_foreign_keys(PG_FUNCTION_ARGS)
 	{
 		const SysFKRelationship *fkrel = &sys_fk_relationships[funcctx->call_cntr];
 		Datum		values[6];
-		bool		nulls[6];
+		bool		nulls[6] = {0};
 		HeapTuple	tuple;
 
-		memset(nulls, false, sizeof(nulls));
-
 		values[0] = ObjectIdGetDatum(fkrel->fk_table);
 		values[1] = FunctionCall3(arrayinp,
 								  CStringGetDatum(fkrel->fk_columns),
diff --git a/src/backend/utils/misc/pg_controldata.c b/src/backend/utils/misc/pg_controldata.c
index 781f8b87580..32be2b4b5d8 100644
--- a/src/backend/utils/misc/pg_controldata.c
+++ b/src/backend/utils/misc/pg_controldata.c
@@ -32,7 +32,7 @@ Datum
 pg_control_system(PG_FUNCTION_ARGS)
 {
 	Datum		values[4];
-	bool		nulls[4];
+	bool		nulls[4] = {0};
 	TupleDesc	tupdesc;
 	HeapTuple	htup;
 	ControlFileData *ControlFile;
@@ -60,16 +60,9 @@ pg_control_system(PG_FUNCTION_ARGS)
 				(errmsg("calculated CRC checksum does not match value stored in file")));
 
 	values[0] = Int32GetDatum(ControlFile->pg_control_version);
-	nulls[0] = false;
-
 	values[1] = Int32GetDatum(ControlFile->catalog_version_no);
-	nulls[1] = false;
-
 	values[2] = Int64GetDatum(ControlFile->system_identifier);
-	nulls[2] = false;
-
 	values[3] = TimestampTzGetDatum(time_t_to_timestamptz(ControlFile->time));
-	nulls[3] = false;
 
 	htup = heap_form_tuple(tupdesc, values, nulls);
 
@@ -80,7 +73,7 @@ Datum
 pg_control_checkpoint(PG_FUNCTION_ARGS)
 {
 	Datum		values[18];
-	bool		nulls[18];
+	bool		nulls[18] = {0};
 	TupleDesc	tupdesc;
 	HeapTuple	htup;
 	ControlFileData *ControlFile;
@@ -147,60 +140,25 @@ pg_control_checkpoint(PG_FUNCTION_ARGS)
 
 	/* Populate the values and null arrays */
 	values[0] = LSNGetDatum(ControlFile->checkPoint);
-	nulls[0] = false;
-
 	values[1] = LSNGetDatum(ControlFile->checkPointCopy.redo);
-	nulls[1] = false;
-
 	values[2] = CStringGetTextDatum(xlogfilename);
-	nulls[2] = false;
-
 	values[3] = Int32GetDatum(ControlFile->checkPointCopy.ThisTimeLineID);
-	nulls[3] = false;
-
 	values[4] = Int32GetDatum(ControlFile->checkPointCopy.PrevTimeLineID);
-	nulls[4] = false;
-
 	values[5] = BoolGetDatum(ControlFile->checkPointCopy.fullPageWrites);
-	nulls[5] = false;
-
 	values[6] = CStringGetTextDatum(psprintf("%u:%u",
 											 EpochFromFullTransactionId(ControlFile->checkPointCopy.nextXid),
 											 XidFromFullTransactionId(ControlFile->checkPointCopy.nextXid)));
-	nulls[6] = false;
-
 	values[7] = ObjectIdGetDatum(ControlFile->checkPointCopy.nextOid);
-	nulls[7] = false;
-
 	values[8] = TransactionIdGetDatum(ControlFile->checkPointCopy.nextMulti);
-	nulls[8] = false;
-
 	values[9] = TransactionIdGetDatum(ControlFile->checkPointCopy.nextMultiOffset);
-	nulls[9] = false;
-
 	values[10] = TransactionIdGetDatum(ControlFile->checkPointCopy.oldestXid);
-	nulls[10] = false;
-
 	values[11] = ObjectIdGetDatum(ControlFile->checkPointCopy.oldestXidDB);
-	nulls[11] = false;
-
 	values[12] = TransactionIdGetDatum(ControlFile->checkPointCopy.oldestActiveXid);
-	nulls[12] = false;
-
 	values[13] = TransactionIdGetDatum(ControlFile->checkPointCopy.oldestMulti);
-	nulls[13] = false;
-
 	values[14] = ObjectIdGetDatum(ControlFile->checkPointCopy.oldestMultiDB);
-	nulls[14] = false;
-
 	values[15] = TransactionIdGetDatum(ControlFile->checkPointCopy.oldestCommitTsXid);
-	nulls[15] = false;
-
 	values[16] = TransactionIdGetDatum(ControlFile->checkPointCopy.newestCommitTsXid);
-	nulls[16] = false;
-
 	values[17] = TimestampTzGetDatum(time_t_to_timestamptz(ControlFile->checkPointCopy.time));
-	nulls[17] = false;
 
 	htup = heap_form_tuple(tupdesc, values, nulls);
 
@@ -211,7 +169,7 @@ Datum
 pg_control_recovery(PG_FUNCTION_ARGS)
 {
 	Datum		values[5];
-	bool		nulls[5];
+	bool		nulls[5] = {0};
 	TupleDesc	tupdesc;
 	HeapTuple	htup;
 	ControlFileData *ControlFile;
@@ -241,19 +199,10 @@ pg_control_recovery(PG_FUNCTION_ARGS)
 				(errmsg("calculated CRC checksum does not match value stored in file")));
 
 	values[0] = LSNGetDatum(ControlFile->minRecoveryPoint);
-	nulls[0] = false;
-
 	values[1] = Int32GetDatum(ControlFile->minRecoveryPointTLI);
-	nulls[1] = false;
-
 	values[2] = LSNGetDatum(ControlFile->backupStartPoint);
-	nulls[2] = false;
-
 	values[3] = LSNGetDatum(ControlFile->backupEndPoint);
-	nulls[3] = false;
-
 	values[4] = BoolGetDatum(ControlFile->backupEndRequired);
-	nulls[4] = false;
 
 	htup = heap_form_tuple(tupdesc, values, nulls);
 
@@ -264,7 +213,7 @@ Datum
 pg_control_init(PG_FUNCTION_ARGS)
 {
 	Datum		values[11];
-	bool		nulls[11];
+	bool		nulls[11] = {0};
 	TupleDesc	tupdesc;
 	HeapTuple	htup;
 	ControlFileData *ControlFile;
@@ -306,37 +255,16 @@ pg_control_init(PG_FUNCTION_ARGS)
 				(errmsg("calculated CRC checksum does not match value stored in file")));
 
 	values[0] = Int32GetDatum(ControlFile->maxAlign);
-	nulls[0] = false;
-
 	values[1] = Int32GetDatum(ControlFile->blcksz);
-	nulls[1] = false;
-
 	values[2] = Int32GetDatum(ControlFile->relseg_size);
-	nulls[2] = false;
-
 	values[3] = Int32GetDatum(ControlFile->xlog_blcksz);
-	nulls[3] = false;
-
 	values[4] = Int32GetDatum(ControlFile->xlog_seg_size);
-	nulls[4] = false;
-
 	values[5] = Int32GetDatum(ControlFile->nameDataLen);
-	nulls[5] = false;
-
 	values[6] = Int32GetDatum(ControlFile->indexMaxKeys);
-	nulls[6] = false;
-
 	values[7] = Int32GetDatum(ControlFile->toast_max_chunk_size);
-	nulls[7] = false;
-
 	values[8] = Int32GetDatum(ControlFile->loblksize);
-	nulls[8] = false;
-
 	values[9] = BoolGetDatum(ControlFile->float8ByVal);
-	nulls[9] = false;
-
 	values[10] = Int32GetDatum(ControlFile->data_checksum_version);
-	nulls[10] = false;
 
 	htup = heap_form_tuple(tupdesc, values, nulls);
 
-- 
2.25.1

