v1-0002-Fix-UBSAN-crash-in-EventTriggerCollectAlterTSConf.patch

text/plain

Filename: v1-0002-Fix-UBSAN-crash-in-EventTriggerCollectAlterTSConf.patch
Type: text/plain
Part: 1
Message: UBSAN crash in EventTriggerCollectAlterTSConfig (memcpy with NULL src)

Patch

Format: format-patch
Series: patch v1-0002
Subject: Fix UBSAN crash in EventTriggerCollectAlterTSConfig
File+
src/backend/commands/event_trigger.c 5 2
From 04344b57c717271a372d1e6335309e0fe53458b6 Mon Sep 17 00:00:00 2001
From: Florin Irion <florin.irion@enterprisedb.com>
Date: Tue, 3 Mar 2026 17:44:18 +0100
Subject: [PATCH v1 2/2] Fix UBSAN crash in EventTriggerCollectAlterTSConfig

Guard the palloc_array + memcpy with an ndicts > 0 check.  The command
struct is already palloc0'd so dictIds defaults to NULL.
---
 src/backend/commands/event_trigger.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/backend/commands/event_trigger.c b/src/backend/commands/event_trigger.c
index 028f9e2de90..2898967fa67 100644
--- a/src/backend/commands/event_trigger.c
+++ b/src/backend/commands/event_trigger.c
@@ -2004,8 +2004,11 @@ EventTriggerCollectAlterTSConfig(AlterTSConfigurationStmt *stmt, Oid cfgId,
 	command->in_extension = creating_extension;
 	ObjectAddressSet(command->d.atscfg.address,
 					 TSConfigRelationId, cfgId);
-	command->d.atscfg.dictIds = palloc_array(Oid, ndicts);
-	memcpy(command->d.atscfg.dictIds, dictIds, sizeof(Oid) * ndicts);
+	if (ndicts > 0)
+	{
+		command->d.atscfg.dictIds = palloc_array(Oid, ndicts);
+		memcpy(command->d.atscfg.dictIds, dictIds, sizeof(Oid) * ndicts);
+	}
 	command->d.atscfg.ndicts = ndicts;
 	command->parsetree = (Node *) copyObject(stmt);
 
-- 
2.45.1