diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-12-18 00:14:24 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-12-18 00:14:24 +0000 |
commit | 689659764faa749b27930f956aa8d1c88b73842d (patch) | |
tree | 0c2641d22ca332cd9f08f4db6d21435f3685c008 /src/backend/executor | |
parent | 49077e87aff0fcb4715edd83d21b99e2f61ca4a1 (diff) | |
download | postgresql-689659764faa749b27930f956aa8d1c88b73842d.tar.gz postgresql-689659764faa749b27930f956aa8d1c88b73842d.zip |
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')
-rw-r--r-- | src/backend/executor/nodeIndexscan.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c index 7b96723844b..a7cfce15b4c 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); + } } /* ---------------------------------------------------------------- |