postgres.git / summary / log / commit / refs

commit    11c2c0cc8d7c9fb0b68390b2b3550b54cf045dbc
Author:   Tom Lane <tgl@sss.pgh.pa.us>
Date:     Mon Apr 06 18:22:17 2026 +0000
First released in: 14.23, 15.18, 16.14, 17.10, 18.4

    Avoid unsafe access to negative index in a TupleDesc.
    
    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 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/commands/copy.c b/src/backend/commands/copy.c index f0be92e3192..13ca317c991 100644 --- a/src/backend/commands/copy.c +++ b/src/backend/commands/copy.c @@ -176,7 +176,8 @@ DoCopy(ParseState *pstate, const CopyStmt *stmt, * would need to expand them somewhere around here), but for * now we keep them consistent with the stored variant. */ - 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"), [parent: 14bf2c39ee2f]