0001-Fix-memory-invalid-access-due-to-using-wrong-conkey.patch
application/octet-stream
Filename: 0001-Fix-memory-invalid-access-due-to-using-wrong-conkey.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: Fix memory invalid access due to using wrong conkey.
| File | + | − |
|---|---|---|
| src/backend/commands/tablecmds.c | 1 | 1 |
| src/test/regress/expected/foreign_key.out | 13 | 1 |
| src/test/regress/sql/foreign_key.sql | 13 | 0 |
From 34df95163f09f9d4a32dc17a244b8b839de4f90f Mon Sep 17 00:00:00 2001 From: Tender Wang <tndrwang@gmail.com> Date: Fri, 25 Oct 2024 14:40:23 +0800 Subject: [PATCH] Fix memory invalid access due to using wrong conkey. --- src/backend/commands/tablecmds.c | 2 +- src/test/regress/expected/foreign_key.out | 14 +++++++++++++- src/test/regress/sql/foreign_key.sql | 13 +++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index e14bc0c054..bf6e8ec59d 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -19543,7 +19543,7 @@ DetachPartitionFinalize(Relation rel, Relation partRel, bool concurrent, Form_pg_attribute att; att = TupleDescAttr(RelationGetDescr(partRel), - attmap->attnums[conkey[i] - 1] - 1); + attmap->attnums[confkey[i] - 1] - 1); fkconstraint->fk_attrs = lappend(fkconstraint->fk_attrs, makeString(NameStr(att->attname))); } diff --git a/src/test/regress/expected/foreign_key.out b/src/test/regress/expected/foreign_key.out index b73e7dced8..5bc36f7bb4 100644 --- a/src/test/regress/expected/foreign_key.out +++ b/src/test/regress/expected/foreign_key.out @@ -2997,7 +2997,7 @@ INSERT INTO fk_r_1 VALUES (2, 1, 2); -- should fail ERROR: insert or update on table "fk_r_1" violates foreign key constraint "fk_r_p_id_p_jd_fkey" DETAIL: Key (p_id, p_jd)=(1, 2) is not present in table "fk_p". DELETE FROM fk_p; -- should fail -ERROR: update or delete on table "fk_p_1_1" violates foreign key constraint "fk_r_1_p_id_p_jd_fkey1" on table "fk_r_1" +ERROR: update or delete on table "fk_p_1_1" violates foreign key constraint "fk_r_1_id_p_id_fkey1" on table "fk_r_1" DETAIL: Key (id, jd)=(1, 1) is still referenced from table "fk_r_1". ALTER TABLE fk_r ATTACH PARTITION fk_r_1 FOR VALUES IN (1); ALTER TABLE fk_r ATTACH PARTITION fk_r_2 FOR VALUES IN (2); @@ -3030,3 +3030,15 @@ SET client_min_messages TO warning; DROP SCHEMA fkpart12 CASCADE; RESET client_min_messages; RESET search_path; +CREATE SCHEMA fkpart13 + CREATE TABLE fkt (a int, b int, PRIMARY KEY (a, b)) + CREATE TABLE fkpt (a int, b int, FOREIGN KEY (a, b) REFERENCES fkt(a, b)) PARTITION BY LIST (a) + CREATE TABLE fktp1 (x int, a int, b int); +SET search_path TO fkpart13; +ALTER TABLE fktp1 DROP COLUMN x; +ALTER TABLE fkpt ATTACH PARTITION fktp1 FOR VALUES IN (1); +ALTER TABLE fkpt DETACH PARTITION fktp1; +SET client_min_messages TO warning; +DROP SCHEMA fkpart13 CASCADE; +RESET client_min_messages; +RESET search_path; diff --git a/src/test/regress/sql/foreign_key.sql b/src/test/regress/sql/foreign_key.sql index 9b2a6b6bff..386bf862f1 100644 --- a/src/test/regress/sql/foreign_key.sql +++ b/src/test/regress/sql/foreign_key.sql @@ -2143,3 +2143,16 @@ SET client_min_messages TO warning; DROP SCHEMA fkpart12 CASCADE; RESET client_min_messages; RESET search_path; + +CREATE SCHEMA fkpart13 + CREATE TABLE fkt (a int, b int, PRIMARY KEY (a, b)) + CREATE TABLE fkpt (a int, b int, FOREIGN KEY (a, b) REFERENCES fkt(a, b)) PARTITION BY LIST (a) + CREATE TABLE fktp1 (x int, a int, b int); +SET search_path TO fkpart13; +ALTER TABLE fktp1 DROP COLUMN x; +ALTER TABLE fkpt ATTACH PARTITION fktp1 FOR VALUES IN (1); +ALTER TABLE fkpt DETACH PARTITION fktp1; +SET client_min_messages TO warning; +DROP SCHEMA fkpart13 CASCADE; +RESET client_min_messages; +RESET search_path; -- 2.25.1