From 1714da6771ccc35053b0d69d606cd0e707858579 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <alvherre@kurilemu.de>
Date: Tue, 3 Mar 2026 20:46:36 +0100
Subject: [PATCH v2] Don't malloc(0) in EventTriggerCollectAlterTSConfig

Author: Florin Irion <florin.irion@enterprisedb.com>
Discussion: https://postgr.es/m/c6fff161-9aee-4290-9ada-71e21e4d84de@gmail.com
---
 src/backend/commands/event_trigger.c                      | 7 +++++--
 src/test/modules/test_ddl_deparse/Makefile                | 1 +
 src/test/modules/test_ddl_deparse/expected/textsearch.out | 5 +++++
 src/test/modules/test_ddl_deparse/meson.build             | 1 +
 src/test/modules/test_ddl_deparse/sql/textsearch.sql      | 3 +++
 5 files changed, 15 insertions(+), 2 deletions(-)
 create mode 100644 src/test/modules/test_ddl_deparse/expected/textsearch.out
 create mode 100644 src/test/modules/test_ddl_deparse/sql/textsearch.sql

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);
 
diff --git a/src/test/modules/test_ddl_deparse/Makefile b/src/test/modules/test_ddl_deparse/Makefile
index 6a9c133ebe9..f91a78d8d92 100644
--- a/src/test/modules/test_ddl_deparse/Makefile
+++ b/src/test/modules/test_ddl_deparse/Makefile
@@ -27,6 +27,7 @@ REGRESS = test_ddl_deparse \
 	alter_type_enum \
 	opfamily \
 	defprivs \
+	textsearch \
 	matviews
 
 EXTRA_INSTALL = contrib/pg_stat_statements
diff --git a/src/test/modules/test_ddl_deparse/expected/textsearch.out b/src/test/modules/test_ddl_deparse/expected/textsearch.out
new file mode 100644
index 00000000000..da0d89e9704
--- /dev/null
+++ b/src/test/modules/test_ddl_deparse/expected/textsearch.out
@@ -0,0 +1,5 @@
+CREATE TEXT SEARCH CONFIGURATION evttrig_tscfg (COPY = pg_catalog.simple);
+NOTICE:  DDL test: type simple, tag CREATE TEXT SEARCH CONFIGURATION
+ALTER TEXT SEARCH CONFIGURATION evttrig_tscfg
+    DROP MAPPING FOR word;
+NOTICE:  DDL test: type alter text search configuration, tag ALTER TEXT SEARCH CONFIGURATION
diff --git a/src/test/modules/test_ddl_deparse/meson.build b/src/test/modules/test_ddl_deparse/meson.build
index 126d8123949..85decdf1f2b 100644
--- a/src/test/modules/test_ddl_deparse/meson.build
+++ b/src/test/modules/test_ddl_deparse/meson.build
@@ -47,6 +47,7 @@ tests += {
       'alter_type_enum',
       'opfamily',
       'defprivs',
+      'textsearch',
       'matviews',
     ],
   },
diff --git a/src/test/modules/test_ddl_deparse/sql/textsearch.sql b/src/test/modules/test_ddl_deparse/sql/textsearch.sql
new file mode 100644
index 00000000000..633899a31cb
--- /dev/null
+++ b/src/test/modules/test_ddl_deparse/sql/textsearch.sql
@@ -0,0 +1,3 @@
+CREATE TEXT SEARCH CONFIGURATION evttrig_tscfg (COPY = pg_catalog.simple);
+ALTER TEXT SEARCH CONFIGURATION evttrig_tscfg
+    DROP MAPPING FOR word;
-- 
2.47.3

