Commit 68965976 authored by Tom Lane's avatar Tom Lane

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().
parent 49077e87
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -470,10 +470,13 @@ ExecIndexMarkPos(IndexScanState *node)
int indexPtr; int indexPtr;
indexPtr = node->iss_MarkIndexPtr = node->iss_IndexPtr; indexPtr = node->iss_MarkIndexPtr = node->iss_IndexPtr;
indexScanDescs = node->iss_ScanDescs; if (indexPtr >= 0 && indexPtr < node->iss_NumIndices)
scanDesc = indexScanDescs[indexPtr]; {
indexScanDescs = node->iss_ScanDescs;
scanDesc = indexScanDescs[indexPtr];
index_markpos(scanDesc); index_markpos(scanDesc);
}
} }
/* ---------------------------------------------------------------- /* ----------------------------------------------------------------
...@@ -482,8 +485,6 @@ ExecIndexMarkPos(IndexScanState *node) ...@@ -482,8 +485,6 @@ ExecIndexMarkPos(IndexScanState *node)
* old comments * old comments
* Restores scan position by restoring the current index. * Restores scan position by restoring the current index.
* Returns nothing. * Returns nothing.
*
* XXX Assumes previously marked scan position belongs to current index
* ---------------------------------------------------------------- * ----------------------------------------------------------------
*/ */
void void
...@@ -494,10 +495,13 @@ ExecIndexRestrPos(IndexScanState *node) ...@@ -494,10 +495,13 @@ ExecIndexRestrPos(IndexScanState *node)
int indexPtr; int indexPtr;
indexPtr = node->iss_IndexPtr = node->iss_MarkIndexPtr; indexPtr = node->iss_IndexPtr = node->iss_MarkIndexPtr;
indexScanDescs = node->iss_ScanDescs; if (indexPtr >= 0 && indexPtr < node->iss_NumIndices)
scanDesc = indexScanDescs[indexPtr]; {
indexScanDescs = node->iss_ScanDescs;
scanDesc = indexScanDescs[indexPtr];
index_restrpos(scanDesc); index_restrpos(scanDesc);
}
} }
/* ---------------------------------------------------------------- /* ----------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment