From: Tom Lane Date: Fri, 15 Jul 2005 18:40:20 +0000 (+0000) Subject: Check for out-of-range varoattno in deparse_context_for_subplan. X-Git-Tag: REL8_0_4~50 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=123e25b3a3bb5413d9ab5daf017b26859fc713ed;p=postgresql 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. --- diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index aa0ac03357..63ec591edf 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -3,7 +3,7 @@ * back to source text * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.188.4.1 2005/04/30 08:19:44 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.188.4.2 2005/07/15 18:40:20 tgl Exp $ * * This software is copyrighted by Jan Wieck - Hamburg. * @@ -1500,11 +1500,17 @@ deparse_context_for_subplan(const char *name, List *tlist, if (var->varnoold > 0 && var->varnoold <= rtablelength) { RangeTblEntry *varrte = rt_fetch(var->varnoold, rtable); - char *varname; + AttrNumber varattnum = var->varoattno; - varname = get_rte_attribute_name(varrte, var->varoattno); - attrs = lappend(attrs, makeString(varname)); - continue; + /* need this test in case it's referencing a resjunk col */ + if (varattnum <= list_length(varrte->eref->colnames)) + { + char *varname; + + varname = get_rte_attribute_name(varrte, varattnum); + attrs = lappend(attrs, makeString(varname)); + continue; + } } } /* Fallback if can't get name */