diff options
| author | Peter Geoghegan | 2024-08-26 15:29:13 +0000 |
|---|---|---|
| committer | Peter Geoghegan | 2024-08-26 15:29:13 +0000 |
| commit | 6749d4aabe74ca37ce351f2e318fe1b3bcf2b71c (patch) | |
| tree | fa2d8ddd41fcc5b6aa6efa897b1827740fdf3aaf /src | |
| parent | 5e58107b0bb5a10b36ba4af4a9f82e6254d75e9f (diff) | |
Fix nbtree lookahead overflow bug.
Add bounds checking to nbtree's lookahead/skip-within-a-page mechanism.
Otherwise it's possible for cases with lots of before-array-keys tuples
to overflow an int16 variable, causing the mechanism to generate an out
of bounds page offset number.
Oversight in commit 5bf748b8, which enhanced nbtree ScalarArrayOp
execution.
Reported-By: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://postgr.es/m/6c68ac42-bbb5-8b24-103e-af0e279c536f@gmail.com
Backpatch: 17-, where nbtree SAOP execution was enhanced.
Diffstat (limited to 'src')
| -rw-r--r-- | src/backend/access/nbtree/nbtutils.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c index d6de2072d40..c22ccec789d 100644 --- a/src/backend/access/nbtree/nbtutils.c +++ b/src/backend/access/nbtree/nbtutils.c @@ -4091,7 +4091,7 @@ _bt_checkkeys_look_ahead(IndexScanDesc scan, BTReadPageState *pstate, */ if (!pstate->targetdistance) pstate->targetdistance = LOOK_AHEAD_DEFAULT_DISTANCE; - else + else if (pstate->targetdistance < MaxIndexTuplesPerPage / 2) pstate->targetdistance *= 2; /* Don't read past the end (or before the start) of the page, though */ |
