postgrespro.git / summary / log / commit / refs
commit 67915fb8e51692ae92622696ad03e933be224bf2
Author: Michael Paquier <michael@paquier.xyz>
Date: Mon Dec 17 03:43:00 2018 +0000
Fix use-after-free bug when renaming constraints
This is an oversight from recent commit b13fd344. While on it, tweak
the previous test with a better name for the renamed primary key.
Detected by buildfarm member prion which forces relation cache release
with -DRELCACHE_FORCE_RELEASE. Back-patch down to 9.4 as the previous
commit.
src/backend/commands/tablecmds.c | 4 ++--
src/test/regress/expected/alter_table.out | 2 +-
src/test/regress/sql/alter_table.sql | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index fe75f9e80b..9149dfd328 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -3020,12 +3020,12 @@ rename_constraint_internal(Oid myrelid,
if (targetrelation)
{
- relation_close(targetrelation, NoLock); /* close rel but keep lock */
-
/*
* Invalidate relcache so as others can see the new constraint name.
*/
CacheInvalidateRelcache(targetrelation);
+
+ relation_close(targetrelation, NoLock); /* close rel but keep lock */
}
return address;
diff --git a/src/test/regress/expected/alter_table.out b/src/test/regress/expected/alter_table.out
index 3fed5812bc..889b15fb8e 100644
--- a/src/test/regress/expected/alter_table.out
+++ b/src/test/regress/expected/alter_table.out
@@ -400,7 +400,7 @@ CREATE TABLE constraint_rename_cache (a int,
ALTER TABLE constraint_rename_cache
RENAME CONSTRAINT chk_a TO chk_a_new;
ALTER TABLE constraint_rename_cache
- RENAME CONSTRAINT constraint_rename_cache_pkey TO chk_a_gt_zero;
+ RENAME CONSTRAINT constraint_rename_cache_pkey TO constraint_rename_pkey_new;
CREATE TABLE like_constraint_rename_cache
(LIKE constraint_rename_cache INCLUDING ALL);
\d like_constraint_rename_cache
diff --git a/src/test/regress/sql/alter_table.sql b/src/test/regress/sql/alter_table.sql
index e5a85c238b..9b87fbcf6d 100644
--- a/src/test/regress/sql/alter_table.sql
+++ b/src/test/regress/sql/alter_table.sql
@@ -296,7 +296,7 @@ CREATE TABLE constraint_rename_cache (a int,
ALTER TABLE constraint_rename_cache
RENAME CONSTRAINT chk_a TO chk_a_new;
ALTER TABLE constraint_rename_cache
- RENAME CONSTRAINT constraint_rename_cache_pkey TO chk_a_gt_zero;
+ RENAME CONSTRAINT constraint_rename_cache_pkey TO constraint_rename_pkey_new;
CREATE TABLE like_constraint_rename_cache
(LIKE constraint_rename_cache INCLUDING ALL);
\d like_constraint_rename_cache
[parent: b13fd344c5fc]