aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-07-15 18:40:20 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-07-15 18:40:20 +0000
commit123e25b3a3bb5413d9ab5daf017b26859fc713ed (patch)
tree3ba14e35cb0458520bec29dae174849c1a9c7d89 /src/backend/utils
parent1e31942a3317b1a31c90c5e6ab6ef3b8760f1063 (diff)
downloadpostgresql-123e25b3a3bb5413d9ab5daf017b26859fc713ed.tar.gz
postgresql-123e25b3a3bb5413d9ab5daf017b26859fc713ed.zip
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.
Diffstat (limited to 'src/backend/utils')
-rw-r--r--src/backend/utils/adt/ruleutils.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index aa0ac03357c..63ec591edfb 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 */