summaryrefslogtreecommitdiff
path: root/src/backend/executor/nodeIndexscan.c
diff options
context:
space:
mode:
authorTom Lane2002-12-18 00:14:24 +0000
committerTom Lane2002-12-18 00:14:24 +0000
commit689659764faa749b27930f956aa8d1c88b73842d (patch)
tree0c2641d22ca332cd9f08f4db6d21435f3685c008 /src/backend/executor/nodeIndexscan.c
parent49077e87aff0fcb4715edd83d21b99e2f61ca4a1 (diff)
Prevent core dump when ExecMarkPos is called before any tuples have been
retrieved. This cannot happen in ordinary execution, but it can happen under EvalPlanQual().
Diffstat (limited to 'src/backend/executor/nodeIndexscan.c')
-rw-r--r--src/backend/executor/nodeIndexscan.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c
index 7b96723844..a7cfce15b4 100644
--- a/src/backend/executor/nodeIndexscan.c
+++ b/src/backend/executor/nodeIndexscan.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.75 2002/12/15 16:17:46 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.76 2002/12/18 00:14:24 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -470,10 +470,13 @@ ExecIndexMarkPos(IndexScanState *node)
int indexPtr;
indexPtr = node->iss_MarkIndexPtr = node->iss_IndexPtr;
- indexScanDescs = node->iss_ScanDescs;
- scanDesc = indexScanDescs[indexPtr];
+ if (indexPtr >= 0 && indexPtr < node->iss_NumIndices)
+ {
+ indexScanDescs = node->iss_ScanDescs;
+ scanDesc = indexScanDescs[indexPtr];
- index_markpos(scanDesc);
+ index_markpos(scanDesc);
+ }
}
/* ----------------------------------------------------------------
@@ -482,8 +485,6 @@ ExecIndexMarkPos(IndexScanState *node)
* old comments
* Restores scan position by restoring the current index.
* Returns nothing.
- *
- * XXX Assumes previously marked scan position belongs to current index
* ----------------------------------------------------------------
*/
void
@@ -494,10 +495,13 @@ ExecIndexRestrPos(IndexScanState *node)
int indexPtr;
indexPtr = node->iss_IndexPtr = node->iss_MarkIndexPtr;
- indexScanDescs = node->iss_ScanDescs;
- scanDesc = indexScanDescs[indexPtr];
+ if (indexPtr >= 0 && indexPtr < node->iss_NumIndices)
+ {
+ indexScanDescs = node->iss_ScanDescs;
+ scanDesc = indexScanDescs[indexPtr];
- index_restrpos(scanDesc);
+ index_restrpos(scanDesc);
+ }
}
/* ----------------------------------------------------------------