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
commit1ed1f801cdd114822a5f08409f23a7f22be0b9fb (patch)
tree146464a96f124f103ec2141f31e340d601adc16a
parenta6a0ae127e76da58e0396cd0f21a97066da2115b (diff)
downloadpostgresql-1ed1f801cdd114822a5f08409f23a7f22be0b9fb.tar.gz
postgresql-1ed1f801cdd114822a5f08409f23a7f22be0b9fb.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 09370a8a5a0..cc08af647e1 100644
--- a/src/backend/catalog/heap.c
+++ b/src/backend/catalog/heap.c
@@ -766,6 +766,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 f8c1fd1806f..d0c96b6de1d 100644
--- a/src/backend/catalog/pg_shdepend.c
+++ b/src/backend/catalog/pg_shdepend.c
@@ -907,6 +907,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);