mirror of
https://github.com/postgres/postgres.git
synced 2025-04-29 13:56:47 +03:00
Check for out-of-range varoattno in deparse_context_for_subplan.
I have seen this case in CVS tip due to new "physical tlist" optimization for subqueries. I believe it probably can't happen in existing releases, but the check is not going to hurt anything, so backpatch to 8.0 just in case.
This commit is contained in:
parent
0182951bc8
commit
184ba4d5ed
@ -3,7 +3,7 @@
|
|||||||
* back to source text
|
* back to source text
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.203 2005/07/02 17:01:50 momjian Exp $
|
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.204 2005/07/15 18:39:59 tgl Exp $
|
||||||
*
|
*
|
||||||
* This software is copyrighted by Jan Wieck - Hamburg.
|
* This software is copyrighted by Jan Wieck - Hamburg.
|
||||||
*
|
*
|
||||||
@ -1510,11 +1510,17 @@ deparse_context_for_subplan(const char *name, List *tlist,
|
|||||||
if (var->varnoold > 0 && var->varnoold <= rtablelength)
|
if (var->varnoold > 0 && var->varnoold <= rtablelength)
|
||||||
{
|
{
|
||||||
RangeTblEntry *varrte = rt_fetch(var->varnoold, rtable);
|
RangeTblEntry *varrte = rt_fetch(var->varnoold, rtable);
|
||||||
char *varname;
|
AttrNumber varattnum = var->varoattno;
|
||||||
|
|
||||||
varname = get_rte_attribute_name(varrte, var->varoattno);
|
/* need this test in case it's referencing a resjunk col */
|
||||||
attrs = lappend(attrs, makeString(varname));
|
if (varattnum <= list_length(varrte->eref->colnames))
|
||||||
continue;
|
{
|
||||||
|
char *varname;
|
||||||
|
|
||||||
|
varname = get_rte_attribute_name(varrte, varattnum);
|
||||||
|
attrs = lappend(attrs, makeString(varname));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Fallback if can't get name */
|
/* Fallback if can't get name */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user