88 *
99 *
1010 * IDENTIFICATION
11- * $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.75 2002/12/15 16:17:46 tgl Exp $
11+ * $Header: /cvsroot/pgsql/src/backend/executor/nodeIndexscan.c,v 1.76 2002/12/18 00:14:24 tgl Exp $
1212 *
1313 *-------------------------------------------------------------------------
1414 */
@@ -470,10 +470,13 @@ ExecIndexMarkPos(IndexScanState *node)
470470int indexPtr ;
471471
472472indexPtr = node -> iss_MarkIndexPtr = node -> iss_IndexPtr ;
473- indexScanDescs = node -> iss_ScanDescs ;
474- scanDesc = indexScanDescs [indexPtr ];
473+ if (indexPtr >=0 && indexPtr < node -> iss_NumIndices )
474+ {
475+ indexScanDescs = node -> iss_ScanDescs ;
476+ scanDesc = indexScanDescs [indexPtr ];
475477
476- index_markpos (scanDesc );
478+ index_markpos (scanDesc );
479+ }
477480}
478481
479482/* ----------------------------------------------------------------
@@ -482,8 +485,6 @@ ExecIndexMarkPos(IndexScanState *node)
482485 * old comments
483486 *Restores scan position by restoring the current index.
484487 *Returns nothing.
485- *
486- *XXX Assumes previously marked scan position belongs to current index
487488 * ----------------------------------------------------------------
488489 */
489490void
@@ -494,10 +495,13 @@ ExecIndexRestrPos(IndexScanState *node)
494495int indexPtr ;
495496
496497indexPtr = node -> iss_IndexPtr = node -> iss_MarkIndexPtr ;
497- indexScanDescs = node -> iss_ScanDescs ;
498- scanDesc = indexScanDescs [indexPtr ];
498+ if (indexPtr >=0 && indexPtr < node -> iss_NumIndices )
499+ {
500+ indexScanDescs = node -> iss_ScanDescs ;
501+ scanDesc = indexScanDescs [indexPtr ];
499502
500- index_restrpos (scanDesc );
503+ index_restrpos (scanDesc );
504+ }
501505}
502506
503507/* ----------------------------------------------------------------