aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/ruleutils.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2005-07-15 18:39:59 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2005-07-15 18:39:59 +0000
commit184ba4d5ede1cef4eec2ec1c17e363fc3c1d84d0 (patch)
treeb1423b700772372ab57e36b58910c57998746506 /src/backend/utils/adt/ruleutils.c
parent0182951bc86e3ce6f8386c24829c0a5931d5124b (diff)
downloadpostgresql-184ba4d5ede1cef4eec2ec1c17e363fc3c1d84d0.tar.gz
postgresql-184ba4d5ede1cef4eec2ec1c17e363fc3c1d84d0.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/adt/ruleutils.c')
-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 0943c71f42a..e2e133b3cb2 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.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.
*
@@ -1510,11 +1510,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 */