aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Gustafsson <dgustafsson@postgresql.org>2021-10-26 10:40:08 +0200
committerDaniel Gustafsson <dgustafsson@postgresql.org>2021-10-26 10:40:08 +0200
commite63ce9e8d6ac8dced20592c4134004640f9f5644 (patch)
tree19700aef7243f3642ac55677fa510c4c4ef5a222
parent8af09daf5629e9b85f37cc23983819b8ccd11b43 (diff)
downloadpostgresql-e63ce9e8d6ac8dced20592c4134004640f9f5644.tar.gz
postgresql-e63ce9e8d6ac8dced20592c4134004640f9f5644.zip
Ensure that slots are zeroed before use
The previous coding relied on the memory for the slots being zeroed elsewhere, which while it was true in this case is not an contract which is guaranteed to hold. Explicitly clear the tts_isnull array to ensure that the slots are filled from a known state. Backpatch to v14 where the catalog multi-inserts were introduced. Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion: https://postgr.es/m/CAJ7c6TP0AowkUgNL6zcAK-s5HYsVHVBRWfu69FRubPpfwZGM9A@mail.gmail.com Backpatch-through: 14
-rw-r--r--src/backend/catalog/heap.c3
-rw-r--r--src/backend/catalog/pg_shdepend.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c
index 5898203972b..81cc39fb70e 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -764,6 +764,9 @@ InsertPgAttributeTuples(Relation pg_attribute_rel,
ExecClearTuple(slot[slotCount]);
+ memset(slot[slotCount]->tts_isnull, false,
+ slot[slotCount]->tts_tupleDescriptor->natts * sizeof(bool));
+
if (new_rel_oid != InvalidOid)
slot[slotCount]->tts_values[Anum_pg_attribute_attrelid - 1] = ObjectIdGetDatum(new_rel_oid);
else
diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c
index 56a9a7662fd..8453d8fefd7 100644
--- a/src/backend/catalog/pg_shdepend.c
+++ b/src/backend/catalog/pg_shdepend.c
@@ -903,6 +903,9 @@ copyTemplateDependencies(Oid templateDbId, Oid newDbId)
ExecClearTuple(slot[slot_stored_count]);
+ memset(slot[slot_stored_count]->tts_isnull, false,
+ slot[slot_stored_count]->tts_tupleDescriptor->natts * sizeof(bool));
+
shdep = (Form_pg_shdepend) GETSTRUCT(tup);
slot[slot_stored_count]->tts_values[Anum_pg_shdepend_dbid - 1] = ObjectIdGetDatum(newDbId);