diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2005-07-15 18:39:59 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2005-07-15 18:39:59 +0000 |
commit | 184ba4d5ede1cef4eec2ec1c17e363fc3c1d84d0 (patch) | |
tree | b1423b700772372ab57e36b58910c57998746506 /src/backend/utils/adt/ruleutils.c | |
parent | 0182951bc86e3ce6f8386c24829c0a5931d5124b (diff) | |
download | postgresql-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.c | 16 |
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 */ |