summaryrefslogtreecommitdiff
path: root/src
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
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')
-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);
+ }
}
/* ----------------------------------------------------------------