Re: Core dump happens when execute sql CREATE VIEW v1(c1) AS (SELECT ('4' COLLATE "C")::INT FROM generate_series(1, 10));
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Yulin PEI <ypeiae@connect.ust.hk>
Cc: "pgsql-hackers@lists.postgresql.org" <pgsql-hackers@lists.postgresql.org>
Date: 2021-04-12T16:59:43Z
Lists: pgsql-hackers
Attachments
- fix-bogus-collation-coercion.patch (text/x-diff) patch
Yulin PEI <ypeiae@connect.ust.hk> writes:
> I found it could cause a crash when executing sql statement: `CREATE VIEW v1(c1) AS (SELECT ('4' COLLATE "C")::INT FROM generate_series(1, 10)); ` in postgres 13.2 release.
Nice catch. I don't think the code in DefineVirtualRelation is wrong:
exprCollation shouldn't report any collation for an expression of a
non-collatable type. Rather the problem is with an old kluge in
coerce_type(), which will push a type coercion underneath a CollateExpr
... without any mind for the possibility that the coercion result isn't
collatable. So the right fix is more or less the attached.
regards, tom lane
Commits
-
Remove no-longer-relevant test case.
- cf0020080a3d 14.0 landed
-
Fix old bug with coercing the result of a COLLATE expression.
- c402b02b9fb5 14.0 landed
- fb2cca828ec8 11.12 landed
- a6158a4d9c2e 9.6.22 landed
- 8a7bd1e6cba3 13.3 landed
- 4b0aecee8a7d 10.17 landed
- 27011bcffa74 12.7 landed