]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Check for out-of-range varoattno in deparse_context_for_subplan.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 15 Jul 2005 18:40:20 +0000 (18:40 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 15 Jul 2005 18:40:20 +0000 (18:40 +0000)
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.

src/backend/utils/adt/ruleutils.c

index aa0ac03357c69063fdfe073cfed99dd5eccde074..63ec591edfb0fb9bb56b079cae120f6289c3757e 100644 (file)
@@ -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 */