On 2026-Mar-03, Florin Irion wrote: > While working on the pg_get_domain_ddl() patch [1], I installed an > event trigger on ddl_command_end in test_setup.sql to automatically > round-trip DDL. This triggered a UBSAN crash on CI [2] that turns out > to be a pre-existing bug since b488c580aef(?).
Cool, yeah, this is broken. I propose to add the corresponding test in src/test/modules/test_ddl_deparse though -- that way we don't need another event trigger. So how about like this? -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "No es bueno caminar con un hombre muerto"
>From 1714da6771ccc35053b0d69d606cd0e707858579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Tue, 3 Mar 2026 20:46:36 +0100 Subject: [PATCH v2] Don't malloc(0) in EventTriggerCollectAlterTSConfig Author: Florin Irion <[email protected]> Discussion: https://postgr.es/m/[email protected] --- 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
