Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8f0a97d

Browse files
committed
Fix segmentation fault in MergeInheritedAttribute()
While converting a pg_attribute tuple into a ColumnDef,ColumnDef::compression remains NULL if there is no compression methodset fot the attribute. Calling strcmp() with NULLColumnDef::compression, when comparing compression methods of parents,causes segmentation fault in MergeInheritedAttribute(). Skipcomparing compression methods if either of them is NULL.Author: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>Reported-by: Alexander Lakhin <exclusion@gmail.com>Discussion:https://www.postgresql.org/message-id/b22a6834-aacb-7b18-0424-a3f5fe889667%40gmail.com
1 parent91e7115 commit8f0a97d

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

‎src/backend/commands/tablecmds.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3432,12 +3432,16 @@ MergeInheritedAttribute(List *inh_columns,
34323432
*/
34333433
if (prevdef->compression == NULL)
34343434
prevdef->compression = newdef->compression;
3435-
else if (strcmp(prevdef->compression, newdef->compression) != 0)
3436-
ereport(ERROR,
3437-
(errcode(ERRCODE_DATATYPE_MISMATCH),
3438-
errmsg("column \"%s\" has a compression method conflict",
3439-
attributeName),
3440-
errdetail("%s versus %s", prevdef->compression, newdef->compression)));
3435+
else if (newdef->compression != NULL)
3436+
{
3437+
if (strcmp(prevdef->compression, newdef->compression) != 0)
3438+
ereport(ERROR,
3439+
(errcode(ERRCODE_DATATYPE_MISMATCH),
3440+
errmsg("column \"%s\" has a compression method conflict",
3441+
attributeName),
3442+
errdetail("%s versus %s",
3443+
prevdef->compression, newdef->compression)));
3444+
}
34413445

34423446
/*
34433447
* Check for GENERATED conflicts

‎src/test/regress/expected/compression.out

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,15 +223,18 @@ SELECT pg_column_compression(f1) FROM cmpart2;
223223
pglz
224224
(1 row)
225225

226-
-- test compression with inheritance, error
227-
CREATE TABLE cminh() INHERITS(cmdata, cmdata1);
226+
-- test compression with inheritance
227+
CREATE TABLE cminh() INHERITS(cmdata, cmdata1); -- error
228228
NOTICE: merging multiple inherited definitions of column "f1"
229229
ERROR: column "f1" has a compression method conflict
230230
DETAIL: pglz versus lz4
231-
CREATE TABLE cminh(f1 TEXT COMPRESSION lz4) INHERITS(cmdata);
231+
CREATE TABLE cminh(f1 TEXT COMPRESSION lz4) INHERITS(cmdata); -- error
232232
NOTICE: merging column "f1" with inherited definition
233233
ERROR: column "f1" has a compression method conflict
234234
DETAIL: pglz versus lz4
235+
CREATE TABLE cmdata3(f1 text);
236+
CREATE TABLE cminh() INHERITS (cmdata, cmdata3);
237+
NOTICE: merging multiple inherited definitions of column "f1"
235238
-- test default_toast_compression GUC
236239
SET default_toast_compression = '';
237240
ERROR: invalid value for parameter "default_toast_compression": ""
@@ -251,6 +254,7 @@ INSERT INTO cmdata VALUES (repeat('123456789', 4004));
251254
f1 | text | | | | extended | lz4 | |
252255
Indexes:
253256
"idx" btree (f1)
257+
Child tables: cminh
254258

255259
SELECT pg_column_compression(f1) FROM cmdata;
256260
pg_column_compression

‎src/test/regress/sql/compression.sql

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,11 @@ INSERT INTO cmpart VALUES (repeat('123456789', 4004));
9393
SELECT pg_column_compression(f1)FROM cmpart1;
9494
SELECT pg_column_compression(f1)FROM cmpart2;
9595

96-
-- test compression with inheritance, error
97-
CREATETABLEcminh() INHERITS(cmdata, cmdata1);
98-
CREATETABLEcminh(f1TEXT COMPRESSION lz4) INHERITS(cmdata);
96+
-- test compression with inheritance
97+
CREATETABLEcminh() INHERITS(cmdata, cmdata1);-- error
98+
CREATETABLEcminh(f1TEXT COMPRESSION lz4) INHERITS(cmdata);-- error
99+
CREATETABLEcmdata3(f1text);
100+
CREATETABLEcminh() INHERITS (cmdata, cmdata3);
99101

100102
-- test default_toast_compression GUC
101103
SET default_toast_compression='';

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp