]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Avoid unsafe access to negative index in a TupleDesc.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Apr 2026 18:22:17 +0000 (14:22 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Apr 2026 18:22:17 +0000 (14:22 -0400)
Commit aa606b931 installed a test that would reference a nonexistent
TupleDesc array entry if a system column is used in COPY FROM WHERE.
Typically this would be harmless, but with bad luck it could result
in a phony "generated columns are not supported in COPY FROM WHERE
conditions" error, and at least in principle it could cause SIGSEGV.
(Compare 570e2fcc0 which fixed the identical problem in another
place.)  Also, since c98ad086a it throws an Assert instead.

In the back branches, just guard the test to make it a safe no-op for
system columns.  Commit 21c69dc73 installed a more aggressive answer
in master.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/6f435023-8ab6-47c2-ba07-035d0c4212f9@gmail.com
Backpatch-through: 14-18

src/backend/commands/copy.c

index e7efb811f66d37fcbb1555e3705dbf0acbca1d01..a334f6b42b1012d7bafe040c55220ed3f6cf4d89 100644 (file)
@@ -169,7 +169,8 @@ DoCopy(ParseState *pstate, const CopyStmt *stmt,
                                 * generated columns are not yet computed when the filtering
                                 * happens.
                                 */
-                               if (TupleDescAttr(RelationGetDescr(rel), attno - 1)->attgenerated)
+                               if (attno > 0 &&
+                                       TupleDescAttr(RelationGetDescr(rel), attno - 1)->attgenerated)
                                        ereport(ERROR,
                                                        errcode(ERRCODE_INVALID_COLUMN_REFERENCE),
                                                        errmsg("generated columns are not supported in COPY FROM WHERE conditions"),